将目录中具有多个子目录的所有文件重命名为“file.txt”

将目录中具有多个子目录的所有文件重命名为“file.txt”

假如我有一个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/'

相关内容