Unix命令重命名多个文件

Unix命令重命名多个文件

我有一些包含不同plugin-cfg.xml文件的目录,我想对其进行备份并保留在同一目录中。

例如

Plug6_a1/plugin-cfg.xml
Plug6_a2/plugin-cfg.xml
Plug6_a3/plugin-cfg.xml

如何为每个目录复制plugin-cfg.xml重命名为?plugin-cfgbk.xml

答案1

find Plu*_a* -type f -name plugin-cfg.xml -exec \
  sh -c 'cp "$1" "$(dirname "$1")"/plugin-cfgbk2.xml ' sh {} \;  

对于位于名称以 开头并包含 的plugin-cfg.xml目录下的每个名为 的文件,请在同一目录中复制to 。Plu_aplugin-cfg.xmlplugin-cfgbk2.xml

答案2

dest=/path/to/backup/destination;
find plu6_a1 plu61_a2 -type f -iname '*.xml' -print0 | while IFS= read -rd '' f; do
    cp -- "$f" "${dest%/}/${f%.xml}-bk.xml"
done

找到 plu6_a1 plu61_a2 中的每个 XML 文件,制作一个副本,在副本中添加后缀 -bk.xml 并将其移动到“$dest”。

编辑:此代码是用 Bash 编写的,它还需要 GNU 或 BSD find(1)。

答案3

这是一个仅需要的一行/bin/sh(但这仅适用于单个目录):

for f in ./*.xml; do cp "$f" "${f%cfg.xml}cfgbk.xml"; done

假设您有 bash 4+(如果您不知道,您可能知道;请检查bash --version),您可以使用 globstar 进行递归:

shopt -s globstar
for f in ./**/*.xml; do cp "$f" "${f%cfg.xml}cfgbk.xml"; done

但是,您可能需要考虑为备份采用更清晰的命名方案 - 我更喜欢在文件名中附加“.backup”之类的内容。

shopt -s globstar
for f in ./**/*.xml; do cp "$f" "$f".backup; done

相关内容