linux - find 命令重命名每个文件和目录。最大深度 1

标签 linux bash shell find command

我需要 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 文件 请在这里帮忙!!

最佳答案

如果您有 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##*/}"' - '{}'

关于linux - find 命令重命名每个文件和目录。最大深度 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53853629/

相关文章:

linux - 通过 MAC 地址检查许多蓝牙设备的快速方法

java - undefined symbol : JNI_CreateJavaVM in Linux

linux - 需要使用 BASH 脚本从 FQDN 列表中删除 TLD

bash - 在 BASH 变量中传递 SED 替换参数

c++ - 将 NS3 返回/退出代码(通过 waf)捕获为 Bash 脚本中的变量

shell - 安装 compass 时出错。无法构建 gem 原生扩展( compass )

shell - hbase shell 命令 - 扫描和过滤

android -/proc/net/tcp和/proc/pid/net/tcp有什么区别

python - 在python中获取文件的自定义属性

shell - 多个 sed 操作创建空文件