【问题标题】:find command to rename each file and dir. max depth 1find 命令重命名每个文件和目录。最大深度 1
【发布时间】:2019-05-20 02:05:16
【问题描述】:

我需要 find 命令来重命名每个文件和目录。在我当前的目录中。 例子: 我有文件和目录:

abc.txt 
abcd.pdf
xyx.csv
XYS
XYZ

I want to rename it 
abc.txt -> old_abc.txt
XYZ -> old_XYZ

我正在使用类似的东西

find . ! -name dbg.txt -exec rename * old_ '{}' \;

如何将每个文件和目录作为参数传递给 find 命令。

注意:我想避免重命名 dbg.txt 文件 请在这里帮忙!!

【问题讨论】:

  • 那么这里有什么问题呢?首先重命名文件:-type f,然后重命名目录:-type d。您可以使用选项-maxdepth 1 设置深度。
  • 也许:for fname in *; do if [[ $fname != "dbg.txt" ]]; then mv "$fname" "old_$fname";fi;done
  • 这是一个想法 - mv $dir old_$dir; mkdir $dir; mv old_$dir/dbg.txt $dir/;不会重命名目录 in 中的所有内容,而是将整个内容移开并使用一个文件创建一个新的干净文件你想保留。没有?

标签: linux bash shell find command


【解决方案1】:

如果你有 perl rename 实用程序,那么你可以使用:

find . -type f -not -name 'dbg.txt' -print0 |
xargs -0 -I {} rename -n 's~^(.+/)(.+)~$1old_$2~' '{}'

{请注意,-n 用于试运行。验证此命令的输出后,删除 -n 选项以重命名所有文件。

如果您没有 rename 实用程序,请使用:

find . -type f -not -name 'dbg.txt' -print0 |
xargs -0 -p -I {} bash -c 'mv "$1" "${1%/*}/old_${1##*/}"' - '{}'

【讨论】:

    【解决方案2】:
    find . -type f -name "*.*"|xargs sed -i 's/old_name/new_name/g'
    

    但是,这将重命名所有子目录和文件中的所有旧名称。

    【讨论】:

      猜你喜欢
      • 2018-04-14
      • 2021-04-13
      • 2012-01-27
      • 2018-05-06
      • 1970-01-01
      • 2013-12-05
      • 2016-05-22
      • 2015-10-08
      • 2021-09-28
      相关资源
      最近更新 更多