我使用find命令创建文件列表。我的问题是利用它的输出,因为谎言和文件夹的语法。 find命令返回的示例位于变量$ LIST中 如果我跑
IFS=\n
echo "$LIST"
我会得到
/C D/e f
/C D/t est
所以,如果我在for循环中使用它,例如......
for file in $LIST
do
echo $file
echo "File printed"
done
我正在
/C D/e f
/C D/t est
File Printed
通过将IFS设置为\ n,将输出作为单个块输出我想要和期待的是
/C D/e f
File Printed
/C D/t est
File Printed
答案 0 :(得分:0)
到目前为止,对find
命令找到的文件采取行动的最佳方法是不要使用for
循环,而是使用-exec
进行操作}开关:
find . -iname '*.java' -exec cp '{}' /tmp/backup/ ';'
这将从当前目录中向下查找与*.java
匹配的所有文件,然后运行
cp filename /tmp/backup/
每一个。您应该查看man
的{{1}}页面,但有一点需要注意的是,如果您以find
结尾,那么文件将一次处理一个,而如果您以';'
结束,然后将一起处理批次。
另一个选项是'+'
,您真正需要使用xargs
作为-print0
切换,然后find
切换为-0
避免文件名中的空格等问题:
xargs
将在所有find . -iname '*.java' -print0 | xargs -0 grep 'static'
个文件中查找static
。
答案 1 :(得分:0)
要将\n
转义序列解释为换行符,您需要使用`$'...'语法:
IFS=$'\n'
或者你可以放一个文字换行符:
IFS='
'