我正在尝试编写一个bash脚本来处理一个文件列表,这些文件的名称在输入文件中每行存储一个,类似于
find . -type f -mtime +15 > /tmp/filelist.txt
for F in $(cat /tmp/filelist.txt) ; do
...
done;
Run Code Online (Sandbox Code Playgroud)
我的问题是filelist.txt中的文件名可能包含空格,因此上面的剪切将扩展该行
my text file.txt
Run Code Online (Sandbox Code Playgroud)
三个不同的文件名my
,text
和file.txt
.我该如何解决这个问题?
Dou*_*der 42
用途read
:
while read F ; do
echo $F
done </tmp/filelist.txt
Run Code Online (Sandbox Code Playgroud)
或者使用IFS来更改shell分隔列表的方式:
OLDIFS=$IFS
IFS="
"
for F in $(cat /tmp/filelist.txt) ; do
echo $F
done
IFS=$OLDIFS
Run Code Online (Sandbox Code Playgroud)
或者(如@tangens所建议的),将循环体转换为单独的脚本,然后使用find
's -exec选项运行if对于直接找到的每个文件.
您可以在没有使用进程替换的临时文件的情况下执
while read F
do
...
done < <(find . -type f -mtime +15)
Run Code Online (Sandbox Code Playgroud)
阅读时使用
cat $FILE | while read line
do
echo $line
done
Run Code Online (Sandbox Code Playgroud)
您可以使用管道进行重定向而不是 cat
归档时间: |
|
查看次数: |
61539 次 |
最近记录: |