列出目录中的文件名并将输出放在文本文件中

时间:2014-10-19 02:14:28

标签: linux bash shell unix

我正在尝试查找目录中的所有文本文件,并将列表复制到文本文件中。我正在使用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

2 个答案:

答案 0 :(得分:1)

不要使用for循环。为了执行该for循环,首先必须找到符合条件的所有文件,然后该列表替换为for循环。这意味着等待``find to process before your for`循环甚至可以开始处理名称。另外,如果有大量文件,您可以重载命令行并丢失要查看的文件。

为什么不:

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

无需循环。无需呼应。简单干净。

另外,您不会遇到可能包含空格的文件名问题。

答案 1 :(得分: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