2014-10-19 155 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 
相关问题