2016-01-25 85 views
0

我試圖列出變量DIR給出的目錄中的文件。我的代碼看起來像這樣至今:「查找」命令與可變目錄

for i in `find $DIR -name "*.txt" 

變量DIR已定義。我不確定這裏的語法是什麼。

+0

爲什麼不'ls「$ DIR」'? – pfnuesel

+0

我還需要包含.txt部分,因爲我只查找.txt文件。 –

+0

你對'$ DIR'的子目錄中的文件感興趣嗎,或者只對'$ DIR'本身感興趣? –

回答

1
ls "${DIR}/*.txt" 

find "${DIR}" -name "*.txt" 

應該做的伎倆。第一個只在目錄本身列出*.txt文件,第二個也在子目錄中有*.txt個文件。

+0

當它,我想我給了一個全面的答案,並忘記了'ls $ {DIR}/*。txt' ... – chw21

-1

不知道你想要什麼。

find $DIR -name "*.txt" -print 

將列出所有以.txt結束,位於$DIR或它的子目錄中的文件。無論如何,您可以省略-print,因爲這是默認行爲。

如果您想要使用此文件做一個簡單的事情,你可以使用find-exec功能:

find $DIR -name "*.txt" -exec wc -l {} \; 

或者你可以使用一個循環:

for f in `find $DIR -name "*.txt"`; do 
    wc -l $f 
    mv $f /some/other/dir/ 
fi 

:正如@ mauro有用地指出的那樣,如果DIR或文件名包含空格,這將不起作用。

乾杯

+0

如果文件路徑包含一個或多個空格,則循環解決方案將不起作用。 – mauro

+1

你說得對。我從來沒有在文件或目錄名稱中使用空格,所以我沒有考慮它。我加了一張紙條。 (雖然這是否值得投票我不知道)。 – chw21

0

我想你想$DIR和/或它的子目錄下執行對擴展名爲「TXT」所有文件規定動作。像往常一樣有不同的解決方案。

這一個:

$ for i in $(find "$DIR" -name \*.txt) ; do echo "Do something with ${i}" ; done 

將無法​​正常工作如果文件路徑(無論是文件本身或一個子目錄)包含空格。

但是你可以使用這個:

$ find "$DIR" -type f -name \*.txt | while read i ; do echo "Do something with ${i}" ; done 

或本:

$ find "$DIR" -type f -name \*.txt -print0 | xargs -0 -I {} echo "Do something with {}" 

或本:

$ find "$DIR" -type f -name \*.txt -exec echo "Do something with {}" \; 

或... 100額外的解決方案。