如何在Linux中以递归方式运行mv命令

时间:2016-02-08 07:23:31

标签: linux bash unix

我的环境:Bash 3.5 LinuxRedhat

我正在使用以下代码将我的所有文件重命名为单个目录。

for file in *.* ; do mv "$file" "Add_$file" ; done

现在,我想以递归方式重命名我的文件。我不知道该怎么做。

1 个答案:

答案 0 :(得分:4)

找到的第一个想法不起作用,因为{}使用以下命令返回./:

find . -type f -name "*.*" -execdir mv {} Add_{} ";"

我们需要一些东西,它会删除前面的./但也可以在子目录中工作。

echo 'f=$(basename "$1"); mv "$f" Add_"$f";' > adhoc.sh
chmod a+x adhoc.sh
find . -type f -name "*.*" -execdir $PWD/adhoc.sh "{}" ";"

至少这适用于gnu-find。其他查找可能没有-execdir命令。

感谢skyking指出我的错误。

对于Linux,您可能会发现'重命名'在存储库中,但通常必须安装它并且不是标准安装的一部分。如果您经常使用命令行重命名,那么值得付出努力。使用重命名,您可以指定正则表达式替换命令并可以先测试它:

find . -type f -exec rename -n "s/(.*)/Add_\1/" {} ";"