我有一个大文件夹,里面有 pdf 文件的子文件夹。我想获取所有 pdf 文件(共 290 个)并将它们放入一个目录中。(我认为这很简单。)这样我就可以使用我的 pdf 程序 pdfshuffle 或类似程序将它们连接成一个文档。我将文件路径和名称放入一个文件中:out.txt
,使用: find $(pwd) -iname '*.PDF' > out.txt
out.txt 包含如下路径和文件:
...
/home/user/Downloads/pedals/PEDALS/Electro-Harmonix/Small Stone Phaser.PDF
/home/user/Downloads/pedals/PEDALS/Electro-Harmonix/Dr. Quack (Doctor Q Melhorado).pdf
/home/user/Downloads/pedals/PEDALS/Marshall/Guv'Nor 1.PDF
/home/user/Downloads/pedals/PEDALS/Marshall/Guv'Nor 2.pdf
...
很酷。所以我想我可以这样做:
#!/bin/bash
input="out.txt"
while IFS= read -r line
do
#echo "$line"
cp $line .
done < "$input"
但是它只复制了大约 36 个 pdf,并且 shell 说它无法统计文件:
...
cp: cannot stat 'Boogie/Vtwin.pdf': No such file or directory
cp: cannot stat '/home/user/Downloads/pedals/PEDALS/Mesa': No such file or directory
...
文件显然在那里,我可以查看它等等。我的方法或脚本有什么问题?
答案1
find
使用和可以轻松处理包含空格或其他奇怪字符的文件名xargs
。阅读man find xargs
并执行以下操作
find . -mindepth 1 -type f -iname '*.pdf' -print0 | \
xargs -0 -r echo mv -t $PWD
验证命令,当它们符合预期时...
删除“ echo
”以实际执行命令。