查找并重命名目录

时间:2012-10-23 21:18:50

标签: linux bash find exec

我正在尝试查找并重命名linux系统上的目录。

文件夹名称类似于:thefoldername-23423-431321

thefoldername是一致的,但数字每次都会改变。

我试过了:

find . -type d -name 'thefoldername*' -exec mv {} newfoldername \;

该命令实际上有效并重命名该目录。但我在终端上收到错误,说没有这样的文件或目录。

我该如何解决?

5 个答案:

答案 0 :(得分:15)

这是一个无害的错误,您可以使用-depth选项摆脱它。

find . -depth -type d -name 'thefoldername*' -exec mv {} newfoldername \;

查找正常行为是处理目录然后递归到它们中。由于你已经重命名,所以当它试图递归时会发现抱怨。 -depth选项告诉find首先递归,然后处理目录。

答案 1 :(得分:2)

它缺少 -execdir 选项!正如发现的手册中所述:

-execdir command {};

-exec类似,但指定的命令是从包含匹配文件的子目录运行的,该文件通常不是您开始查找的目录。

find . -depth -type d -name 'thefoldername*' -execdir mv {} newfoldername \;

答案 2 :(得分:0)

使用上一个答案,我的文件夹内容消失了 这是我的解决方案。效果很好: for i in find -type d -name 'oldFolderName'; do dirname=$(dirname "$i") mv $dirname/oldFolderName $dirname/newFolderName done

答案 3 :(得分:0)

... / ABC-> ... / BCD

find . -depth -type d -name 'ABC' -execdir mv {} $(dirname $i)/BCD \;

答案 4 :(得分:0)

用old_value替换1100,用您要替换的new_value替换2200。

示例

for i in $(find . -type d -iname '1100');do echo "mv "$i" "$i"__" >> test.txt; sed 's/1100__/2200/g' test.txt > test_1.txt; bash test_1.txt ; rm test*.txt ; done

证明

[用户@服务器测试] $ ls -la check /

drwxr-xr-x。 1位用户用户0 Jun 7 12:16 1100

[用户@服务器测试] $ for i in $(find . -type d -iname '1100');do echo "mv "$i" "$i"__" >> test.txt; sed 's/1100__/2200/g' test.txt > test_1.txt; bash test_1.txt ; rm test*.txt ; done

[用户@服务器测试] $ ls -la check /

drwxr-xr-x。 1位用户用户0 Jun 7 12:16 2200

此处sed中的__仅用于更改名称,它没有其他意义