2014-10-19 137 views
0

我正在嘗試查找我的目錄中的所有文本文件並將列表複製到文本文件中。我正在使用for循環來獲取名稱。然後輸出被放置在文本文件中。不過,我收到了一個syntax error near unexpected token $'do \ r''`的跡象。什麼是最好的方法來做到這一點?也爲文本文件名我怎麼能保存它與日期/時間戳名稱?列出目錄中的文件名並將其輸出到文本文件中

FILE_PATH="/my_folder/" 
for f in $(find $FILE_PATH -type f -name '*.txt'); do 
    echo "file '$f'" >> "$FILE_PATH"mylist.txt; 
done 

回答

1

請勿使用for循環。爲了使for循環執行,它首先必須找到所有符合條件的文件,然後替換成for循環的列表。這意味着等待``找到to process before your for`循環甚至可以開始處理名稱。另外,如果有大量文件,則可以重載命令行並丟失想要查看的文件。

爲什麼不:

FILE_PATH="/my_folder" 
find $FILE_PATH -type f -name '*.txt' > "$FILE_PATH/mylist.txt" 

沒有必要爲一個循環。無需回聲。簡單而乾淨。

另外,您沒有可能包含空格的文件名的問題。

+0

太好了!由於某種原因,我不斷收到這個錯誤':Protocol errorass_concat.sh:' – 2014-10-19 04:18:56

+0

'errorass_concat.sh'是什麼?你確定錯誤是與這條線?將'set -xv'添加到shell腳本的頂部。這將在執行時打印出每一行,並且會幫助向您顯示發生_Protocol_錯誤的位置。 – 2014-10-19 05:35:46

1

您可以使用路徑擴展避免find

FILE_PATH="/my_folder/" 
for f in "$FILE_PATH"/* ; do 
    test -f "$f" || continue  # not a regular file 
    echo "$f" 
done >| "$FILE_PATH/mylist.txt" # >| force overwrite 
相關問題