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

Al *_*aba 0 command-line bash find mv

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

sudo find . -type f -iname "*.pdf" -exec mv {} /pdf \;
Run Code Online (Sandbox Code Playgroud)

pdf 文件不见了,但不在我预期的地方。也没有我认为可能存在的 /pdf 文件夹。/pdf 有员工文件夹

-rw-r--r--@   1 myusername  staff   9,9M 19 Aug 19:53 pdf
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Cha*_*Rex 5

那不是文件夹。文件夹显示d在最左侧的其他权限前面。drwx-r-xr-x如果它是一个文件夹,你会看到类似的东西。

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


另一个相关问题涉及恢复丢失的 PDF。


wal*_*tor 5

mv您提供的目标目录/pdf,您应该使用./pdf. 由于pdf在顶级目录中没有命名目录(文件夹)/,但由于您是rootmv将它移动的每个文件移动到文件 /pdf. 唯一可恢复的文件现在称为/pdf,并且是mv.

sudo find顺便说一句,当我,我总是使用--target-directoryswitch 到mv,并首先运行 find echo,以确保它做我想要的,像这样:

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

但是,我可能会这样做:

mkdir ./pdf
find . -type f -iname '*.pdf' -print0 | xargs -0 mv --target-directory=./pdf
Run Code Online (Sandbox Code Playgroud)

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