考虑:
cat fileNames.txt | xargs find . -name
我希望上述命令能够找到 fileNames.txt 中每个文件名的路径,但该命令没有产生任何输出。为什么?
答案1
解决办法是:
xargs --max-args=1 find . -iname < fileNames.txt
答案2
常规xargs
调用会删除换行符,将输入的所有行放在单个命令行中。但是,您可以使用选项-I <pattern>
,其中将为每一行输入调用一个命令,并<pattern>
用行内容替换。
还请注意,您可能应该添加-print
列出路径的选项。
cat fileNames.txt | xargs -I {} find . -name {} -print
答案3
该-name
选项仅接受一个参数。我不确定为什么你没有收到错误消息。尝试
sed 's/.*/-name "&"/' fileNames.txt | xargs find .
答案4
到目前为止,答案对于包含空格、' 或 " 的文件名很难回答:
$ echo \'\ \" | xargs -I {} find . -name {} -print
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
$ echo \'\ \" | sed 's/.*/-name "&"/' | xargs find .
xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option
find: missing argument to `-name'
如果文件是由用户制作的,您将要体验有趣的命名文件。如果您安装了 GNU Parallel,您可以执行以下操作:
cat fileNames.txt | parallel find . -name {} -print
观看介绍视频以了解有关 GNU Parallel 的更多信息:http://www.youtube.com/watch?v=OpaiGYxkSuQ
GNU Parallel 可以在以下网址下载:ftp://ftp.gnu.org/gnu/parallel/据报道,它在 Cygwin 下运行。