【问题标题】:find and remove files with space using find command on Linux在 Linux 上使用 find 命令查找和删除带空格的文件
【发布时间】:2011-09-08 16:19:00
【问题描述】:

我正在尝试使用 Ubuntu 中的 find 命令删除 Windows 分区中的所有 thumbs.db 文件:

find . -iname "*.db"|while read junk;do rm -rfv $junk;done

但这对我不起作用,什么也没有发生!我想我找到了问题,目录名称中的空格!

我以前在以前版本的 Ubuntu 上做过这个技巧来删除我的垃圾文件,但现在在最新版本的 Ubuntu 上我不能。

我的命令有错误吗?

【问题讨论】:

  • find . -iname "*.db" 有什么回报吗?
  • 这个问题确实属于superuser.com
  • @mat:是的,它返回已创建的 Thumbs.db 文件的路径。但我想我找到了问题所在,目录名中的空格!

标签: linux shell command-line ubuntu


【解决方案1】:

代码看起来不错,可以在 arch 和 debian 上运行。可能没有匹配“*.db”的文件?

附带说明:删除所有后缀为“.db”的文件可能不是一个好主意,因为您可能会意外删除“Thumbs.db”以外的其他文件

【讨论】:

    【解决方案2】:

    我会这样做:

    find . -iname 'thumbs.db' -exec rm -rfv {} +
    

    这样,即使您的目录名称中包含空格,它仍然有效。

    【讨论】:

    • 谢谢克里斯,我认为我的问题也是目录名称中的空格。
    • 在 Windows Thumbs.db 中带有大写 T:find . -iname 'Thumbs.db' -exec rm -rfv {} + 也很有用:find . -iname 'desktop.ini' -exec rm -rfv {} +
    【解决方案3】:

    我不确定你为什么使用while

    find . -iname 'thumbs.db' -exec rm -rfv {} \;
    

    ...应该足够了(并且只删除您想要的文件,而不是任何可能存在的 BDB 文件)。

    【讨论】:

      【解决方案4】:

      首先检查你的命令的第一部分,即:

      找到 . -iname "*.db"

      正在返回任何东西。

      如果是,那么您可以使用xargs 来完成您的任务:

      找到 . -iname "*.db" | xargs rm -rfv

      更新:来自 cmets,这是不安全的,特别是在目录/文件名中有空格的情况下。您需要使用 -print0 / xargs -0 以确保安全。

      【讨论】:

      • 如果文件或目录中有空格,那是很危险的。您将需要 -print0/xargs -0 组合以使其安全(或使用 -exec 方法)
      • @Mat:为了我和其他学习的缘故,你能在这里写下它有什么不安全的地方吗?谢谢。
      • 在一个空目录中试试这个:mkdir -p "a/b c" ; touch b ; touch c ; find . -iname 'b*' | xargs -n 1 echo。你会看到c 在自己的行中打印出来。如果您将echo 替换为rm 变体,它将在您要求-iname 'b*' 时删除名为c 的文件。
      • @Mat: 非常感谢这个注释,我认为这是一个关于这个命令的重要通知,以防止删除错误的文件。
      【解决方案5】:

      只是为了把它扔出去

      find . -name "*.pyc" -delete
      

      【讨论】:

      • 有一天我会赢得这场投票最高的比赛;)
      猜你喜欢
      • 1970-01-01
      • 2018-12-28
      • 2013-07-24
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      相关资源
      最近更新 更多