gpt4 book ai didi

bash - 复制和删除

转载 作者:行者123 更新时间:2023-12-04 18:47:22 25 4
gpt4 key购买 nike

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

find . -type f -mtime +30

完毕。

然后我需要将它们复制到一个位置,同时保持它们的 dir 结构超过当前的 ./这是因为文件结构是每个文件唯一性的一部分。我可能有 200 个名为 sum 的文件,但是 FunRun/Sum 和 Smoke/Sum 是两个不同的东西。
find . -type f -mtime +30 -exec cp --parents '{}' /home/me/backup \;

完毕。但这并没有删除它们......嗯mv是一个带有删除的cp。但是 MV 没有 --parents 开关。

所以我尝试了
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 脚本来完成,或者你们可以提供帮助。所以我想我会在这里问一下,看看周末情况如何并在周一进行测试。

谢谢你的帮助。

最佳答案

你所做的大部分事情看起来像是枪式调试尝试——只是在不知道它们的含义的情况下随机更改事物。你真的应该通读 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除了最后一个参数,只有 -exec那。

如果你想做 for循环,你可以这样做……虽然 xargs可能比一个一个地做更有意义,让我们尝试一下:
  • 你没有调用 find一点也不;单引号标记文字字符串。如果要将字符串作为命令执行并获取结果,则需要反引号。或者,更好的是,$(…) .
  • 一条线for循环在 do 之前需要一个分号.
  • 您已添加 sudo ,不在您的 find 中命令,所以我怀疑你也想要它。
  • 使用 $file如果您有任何文件名称中有空格,那么不带引号是个坏主意。
  • '{}'\;将通过文字 {};字符串到 cp .所以,你要求它复制 $file , {} , 和 /home/me/backup; .这没有任何意义。 find command 对这些东西有特殊用途,但是 cp没有。如果您使用 '{}'要尝试传递文件名,您已经在使用 $file .

  • 所以:
    for file in $(find . -type f -mtime +30); do cp "$file" --parents /home/me/backup && sudo rm "$file"; done

    关于bash - 复制和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27072712/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com