在命令行中使用“查找”

在命令行中使用“查找”

计算机正在运行 Yosemite。我试图通过命令行将几个文档从下载文件夹移动到文档

find . -iname '*.pdf' -exec mv "{}" ./Documents \

给出的答案几乎回答了所有问题。我现在只是想知道移动的文件会发生什么。它们位于 root 用户的 Documents 文件夹中吗?

答案1

要移动文件,您不需要先找到它们。你可以这样做:

mv *.pdf ../Documents

如果您坚持使用查找:

find . -iname '*.pdf' -exec mv {} ../Documents \;

这里最后一个“\”是转义“;”这样的字符。这样 shell 就可以正常工作了。

答案2

该命令最好如下所示。

find ~/Downloads -iname "*.pdf" -exec mv '{}' ~/Documents \;

请注意反斜杠后面的分号。或者,也可以如下更好。

find ~/Downloads -iname "*.pdf" -exec mv '{}' ~/Documents +

请注意所使用的加号。

或者甚至如下。

find ~/Downloads -iname *.pdf -exec mv {} ~/Documents +

周围的单引号{}用于告诉 shell 不要将引号内的字符解释为任何类型的 shell 标点符号。通常不需要它们,但使用单引号并不是一个坏习惯。据我所知,这只是fish扩展{}到其他方面。这些{}字符本身基本上代表了找到的文件的列表。

参数两边的双引号iname也不是必需的,但使用它们也不是一个坏习惯。

问题中的命令使用继续字符,因此Enter在它后面按应该只会提供您可以继续键入的另一行。那么,在该命令之后还输入了什么,或者您只是忘记在问题中输入分号?如果该命令是作为普通用户键入的,则 PDF 文件可能仍位于您的主目录中的某个位置。

打开终端并输入 是最有用的man find。然后,请参阅“示例”部分,了解涵盖此场景的使用说明。

要查找系统上的所有 PDF 文件:

cd && find / -iname "*.pdf" 1>found.txt

这将创建一个列表,found.txt,其中包含普通用户帐户有权列出的所有 PDF 文件。我不知道是否有足够的信息来回答丢失的文件去了哪里。

答案3

我假设您使用“查找”,因为子目录中有 pdf 文件,或者您只需使用“mv *.pdf ../Documents”。首先,我会执行以下操作,只是为了确保该命令正在执行我想要的操作。

寻找 。 -类型 f | grep 数据$

然后我用 xargs 填写命令的其余部分

寻找 。 -类型 f | grep 数据$ | xargs mv ../文档

作为一种习惯,我喜欢将“grep”和“xargs”放在命令的末尾,因为我已经知道输出以及它们正在做什么。

相关内容