在特定日期范围内将文件从一个文件夹复制到另一个文件夹

Ven*_*nki 6 command-line bash copy

我已经在使用以下命令从特定日期复制文件。

以前我使用过这个命令,它运行良好,但现在显示错误:

-bash: /bin/cp: Argument list too long
Run Code Online (Sandbox Code Playgroud)

使用的赞:

cd /share/new/
cp `find . -type f -newermt '16 july 2018'` /share/test
Run Code Online (Sandbox Code Playgroud)

我需要从 7 月 20 日到今天复制文件夹“new”中的所有文件。我怎样才能做到这一点?

Mr *_*unz 10

不要cp直接与find.

它可能会在一个步骤中传递许多文件(这就是为什么你会收到错误Argument list too long)。

使用 的-exec参数find,它执行给定的命令,将每个匹配的文件传递给cp,一次一个:

cd /share/new/
find . -type f -newermt '16 july 2018' -exec cp {} /share/test \;
Run Code Online (Sandbox Code Playgroud)

  • @vanadium find 的 -exec 直接执行程序。它不调用外壳;`{}` 被替换为文件名作为单个参数,而不考虑引用(无论如何,find 从未真正看到)。 (5认同)
  • 您可以通过使用 `-t` 开关显式指定目标,而不是通过语法,并利用构建一个参数列表,即`find <tests> -exec cp -t /share/test {} +` 参数列表根据需要被破坏多次以完成而不超过限制。这避免了启动 `cp` n 次,其中 n 是文件数... (4认同)