我正在尝试查找并重命名Linux系统上的目录。
文件夹名称类似于:thefoldername-23423-431321
thefoldername
是一致的,但数字每次都会变化。
我试过这个:
find . -type d -name 'thefoldername*' -exec mv {} newfoldername ;
该命令实际上有效并重命名该目录。但是我在终端上收到一个错误,说没有这样的文件或目录。
我该如何解决它?
这是一个无害的错误,您可以使用-depth
选项将其删除。
find . -depth -type d -name 'thefoldername*' -exec mv {} newfoldername ;
Find 的正常行为是处理目录,然后递归到其中。由于您已重命名,因此当它尝试递归时会发现抱怨。-depth
选项告诉 find 先递归,然后再处理目录。
它缺少-execdir选项!如查找手册页中所述:
-execdir command {};
与-exec
一样,但指定的命令是从包含匹配文件的子目录运行的,该子目录通常不是您开始查找的目录。
find . -depth -type d -name 'thefoldername*' -execdir mv {} newfoldername ;
使用上一个答案,我的文件夹内容消失了。
这是我的解决方案。效果很好:
for i in
find -type d -name 'oldFolderName'
; 做 目录名称=$(目录名称"$i") mv $dirname/oldFolderName $dirname/newFolderName 做
.../ABC -> .../BCD
find . -depth -type d -name 'ABC' -execdir mv {} $(dirname $i)/BCD ;
将 1100 替换为 old_value,将 2200 替换为要替换的new_value。
例
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
证明
[user@server测试]$ ls -la check/
drwxr-xr-x. 1 用户用户 0 6月 7 12:16 1100
[user@server测试]$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
[user@server测试]$ ls -la check/
drwxr-xr-x. 1 用户用户 0 6月 7 12:16 2200
这里 __ 在 sed 中仅用于更改名称,它没有其他意义