【问题标题】:Find files and delete characters in the filenames查找文件并删除文件名中的字符
【发布时间】:2016-04-10 21:51:58
【问题描述】:

所以我有一个名为testdir 的目录,我想从该目录中的文件中删除文件名中的下划线。

我尝试使用这个命令

find testdir -type f -exec ls {} \; | sed 's/_*//'

它会输出不带下划线的文件名,但不会永久删除下划线。谁能帮帮我?

谢谢!

【问题讨论】:

    标签: sed find


    【解决方案1】:

    如果您只是循环浏览目录中的文件,请使用简单的循环:

    while IFS= read -r file
    do
       echo mv "$file" "${file//_/}"         #once you are sure it works, remove the echo!
    done < <(find -type f -name "*_*")
    

    这将为while 循环提供find 命令的输出。然后,使用${var//_/} 删除名称中的所有_


    为什么你的方法不起作用?

    因为你在说

    find ... -exec ls {} \; | sed '...'
    

    也就是说,您正在寻找一些东西,然后用sed 更改输出。也就是说,对文件本身没有做任何事情。

    【讨论】:

    • 不,但是如果您再次 cd testdir,文件的名称不会更改,谢谢!
    • @DriesCoppens 不确定你的意思和你尝试了什么。正如您在我的回答中看到的那样,一旦您看到 echo 按预期工作,您就需要删除它。
    • 是的,我明白了,但我的方法并没有改变 :)
    【解决方案2】:

    这可能会对您有所帮助 查找 testdir -type f |重命名's/_//'

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-22
      • 2012-06-09
      • 2020-10-08
      • 2013-10-08
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      相关资源
      最近更新 更多