假如我有一个directory1
文件,里面有一个“file.txt”和子目录:“week”、“today”、“last month”。其中“week”和“last month”也是“file.txt”。
directory1/
file.txt
week/
file.txt
today/
last month/
file.txt
我怎样才能在终端中仅使用一行命令mv
或命令rename.ul
将“directory1”中的每个“file.txt”重命名为“new_file.txt”?
答案1
还有一个避免绝对路径欺骗的方法:
find directory1 -name file.txt -execdir mv {} new_file.txt \;
execdir
将从包含匹配文件的子目录中运行指定的命令。这甚至消除了引用文件名的需要,因为我们知道文件名不包含任何空格。
答案2
find directory1/ -type f -name file.txt | while read f; do d=$(dirname $f); mv "$d"/file.txt "$d"/new_file.txt; done
答案3
另一个解决方案:
find directory1 -name file.txt -exec bash -c 'mv "{}" "$(dirname "{}")/new_file.txt"' \;
答案4
还有一种方法:
find directory1 -name file.txt -print0 | xargs -0 rename 's/file\.txt/new_file\.txt/'