Linux列表循环问题

时间:2014-10-26 21:09:46

标签: linux list unix for-loop

我使用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

2 个答案:

答案 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='
'