为什么这个 bash 脚本没有获取所有文件?

为什么这个 bash 脚本没有获取所有文件?

我有一个大文件夹,里面有 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”以实际执行命令。

相关内容