我正在尝试编写一个 bash 脚本来处理一系列文件,这些文件的名称在输入文件中每行存储一个,类似于
find . -type f -mtime +15 > /tmp/filelist.txt
for F in $(cat /tmp/filelist.txt) ; do
...
done;
我的问题是 filelist.txt 中的文件名可能包含空格,所以上面的片段会扩展行
my text file.txt
到三个不同的文件名,my
、text
和 file.txt
。我该如何解决?
最佳答案
使用读取
:
while read F ; do
echo $F
done </tmp/filelist.txt
或者使用 IFS 更改 shell 分隔列表的方式:
OLDIFS=$IFS
IFS="
"
for F in $(cat /tmp/filelist.txt) ; do
echo $F
done
IFS=$OLDIFS
或者(如@tangens 所建议),将循环主体转换为单独的脚本,然后使用 find
的 -exec 选项运行如果直接找到的每个文件。
关于bash - 如何从 bash 中的文件中读取文件名列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1688999/