2013-05-29 26 views
0

假設我在我的$HOME中有一個目錄dir,讓我們對其製作symlink如何使包含符號鏈接的變量在bash for循環中展開?

ln -s "$HOME/dir" "$HOME/.toDir" 

然後,我們引入包含變量symlink

TO_DIR="$HOME/.toDir" 

我想TO_DIR枚舉目錄指向的所有文件,無需分析認爲這是一個不好的做法ls輸出(但工作!),我試圖沒有成功使用一個for循環:

for file in "$TO_DIR"/* 
do 
    # do something with $file 
done 

我得不到文件,似乎$TO_DIR沒有展開到目錄。

更新:它從命令行(交互式)工作,但不能從shell腳本運行。

+0

嘗試'TO_DIR =「$ HOME/.toDir」'而不是'TO_DIR =「$ HOME/toDir」' – devnull

+0

可能的錯字'TO_DIR' /'TO_DOR'? – fedorqui

+0

答覆已更新。 – tarrsalah

回答

1

我用下面的腳本:

#!/bin/bash 

TO_DIR="$HOME/.toDir" 

for f in $TO_DIR/*; do 
    echo $f 
done 

,它工作正常:

$ ./test.bsh 
/home/stefanos/.toDir/a 
/home/stefanos/.toDir/b 

也許你想設置的變量TO_DIR外的腳本

0

使用命令readlink

readlink symlink 

將輸出符號鏈接的目標。小心,不要像這樣調用它readlink symlink/

-2

你會更好使用這樣的事情,而不是:

find -L "$TO_DIR" -maxdepth 1 -type f | while read filename; do 
    dosomething "$filename" 
done 

這樣,我們要求找到找到「$ TO_DIR」的所有文件,該-L 開關告訴它遵循符號鏈接。我們還通過使用while循環每行一次讀取 文件名來防止由於文件名中有空格而導致的 循環失敗。對於for循環 ,它會將文件名中包含空格的文件名拆分爲分割爲空格的單個塊 。

上面還會找到名稱類似「$ TO_DIR/.hidden」的文件,因此您可能需要注意這個問題 。

+0

這會因爲不推薦解析'ls'的原因而失敗:包含換行符的文件名。 – chepner