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