![Unix命令重命名多个文件](https://linux22.com/image/31953/Unix%E5%91%BD%E4%BB%A4%E9%87%8D%E5%91%BD%E5%90%8D%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6.png)
我有一些包含不同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
_a
plugin-cfg.xml
plugin-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