不明白 find + exec 将文件移动到了哪里

不明白 find + exec 将文件移动到了哪里

我想将所有 PDF 复制到 PDF 文件夹中,为此我使用了这个find命令和-exec选项。在开始之前,我创建了一个名为pdf当前文件夹的文件夹

sudo find . -type f -iname "*.pdf" -exec mv {} /pdf \;

PDF 不见了,但不在我预期的地方。此外,也没有我以为应该有的 /pdf 文件夹。/pdf 处有一个员工文件夹

-rw-r--r--@   1 myusername  staff   9,9M 19 Aug 19:53 pdf

任何想法?

答案1

mv您指定的目标目录为/pdf,您应该使用。由于顶级目录中./pdf没有指定的目录(文件夹),但由于您为,因此将其移动的每个文件都移动到pdf/rootmv文件 /pdf。现在唯一可恢复的文件名为/pdf,并且是 处理的最后一个文件mv

顺便说一句,当我 时sudo find,我总是使用--target-directory切换到mv,然后先运行查找echo,以确保它能按照我的要求进行操作,如下所示:

# NOTE: This demonstrates a FAIL
sudo find . -type f -iname '*.pdf' -exec echo mv --target-directory=/pdf {}  \;

但我可能会这样做:

mkdir ./pdf
find . -type f -iname '*.pdf' -print0 | xargs -0 mv --target-directory=./pdf

mv如果参数--target-directory不存在,将显示错误消息。
我使用find -print0配对来xargs -0处理包含空格和其他愚蠢字符的文件名。

答案2

d那不是文件夹。文件夹在最左侧的其他权限前面显示为。您会看到drwx-r-xr-x类似于文件夹的内容。

相反,您重命名了每个文件/pdf。将文件重命名为已存在的名称会删除原始文件。这意味着您删除了文件,除了您重命名的最后一个文件。


另一个相关问题处理恢复丢失的 PDF。

相关内容