复制和删除

时间:2014-11-22 00:38:58

标签: bash ubuntu move dir delete-file

好的,我是ubuntu的新手。我有200,000个文件需要通过,并存档30天内未更新的文件。

find . -type f -mtime +30

完成。

然后我需要将它们复制到一个位置,同时保持它们的目录结构超过当前./这是因为文件结构是每个文件唯一性的一部分。我可能有200个名为sum的文件但是FunRun / Sum和Smoke / Sum是两个不同的东西。

find . -type f -mtime +30 -exec cp --parents '{}' /home/me/backup \;

完成。但是这并没有删除它们......那么mv是一个带删除的cp。但MV没有 - 父母转换。

所以我试过

find . -type f -mtime +30 -exec cp --parents '{}' /home/me/backup \; && rm
for file in 'find . -type f -mtime +30' do sudo cp $file --parents '{}' /home/me/backup \; && sudo rm $file; done

不行。所以我正在玩创建文件列表并像旧学校批处理文件一样使用它。问题是列表需要很长时间才能生成,我想自动完成此过程。所以我搜索并测试没有任何工作。因此,单行bash脚本是一个失败的原因,需要编写一个python脚本来执行它,或者你们可以提供帮助。所以我想我会在这里问一下,看看周末是如何进行的,并在星期一进行测试。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你正在做的大部分事情看起来像猎枪调试尝试 - 只是改变随机事物而不知道它们的意思。您应该仔细阅读find上的教程,也可以阅读关于bash脚本的教程。


无论如何,您可以在单个find命令上串联多个操作。如果您愿意,甚至可以执行多个-exec操作。所以:

find . -type f -mtime +30 -exec cp --parents '{}' /home/me/backup \; -exec rm '{}' \;

或者更简单:

find . -type f -mtime +30 -exec cp --parents '{}' /home/me/backup \; -delete

或者,当然,您可以编写自己的两行shell脚本,使用其所有参数调用cp --parents,然后使用除最后一个参数之外的所有参数调用rm,并且仅{{1那个。


如果你想进行-exec循环,你可以做到这一点......虽然for可能比逐个进行更有意义,但让我们按照你的方式尝试:

  • 你根本不打电话给xargs;单引号标记文字字符串。如果要将字符串作为命令执行并获得结果,则需要反引号。或者,更好,find
  • 单行$(…)循环在for之前需要分号。
  • 您添加了do,这不在您的sudo命令中,所以我怀疑您是否也想要它。
  • 如果你的名字中有任何文件,例如空格,那么在没有引号的情况下使用find是一个坏主意。
  • $file'{}'会将文字\;{}字符串传递给;。因此,您要求它将cp$file{}复制到/home/me/backup。这没有任何意义。 ;命令对这些内容有特殊用途,但find没有。如果您使用cp尝试传递文件名,那么您已经使用'{}'进行了此操作。

所以:

$file