操作系统是 Centos 7
我已经找了几天了,感觉我现在应该找到一些东西了。
我有成百上千个目录,如下所示:
/tmp/user1/app/webapp/foo/bar.txt
/tmp/user2/app/webapp/etc/bar1.txt
/tmp/user3/app/webapp/whatever/bar2.txt
/tmp/user4/app/webapp/sure/bar3.txt
我需要将“webapp”更改为“new_webapp”
和都是不变的/tmp/
,/app/
但要重命名的目录下的用户和内容是未知的且多种多样。每个现有的目录结构都不为空。
我还没有找到一种方法来简洁地做到这一点,而无需手动地在每个目录中费力地将文件进出目录,我希望有人可能知道一种更有效的方法。
答案1
只是重命名它们吗?
使用 util-linux 重命名:
rename -v webapp new_webapp /tmp/user*/app/webapp
使用查找(可变深度):
find /tmp -depth -type d -name "webapp" -execdir mv webapp new_webapp \;
带 mv 的 for 循环:
for path in /tmp/user*/app/
do
mv -v "$path"/webapp "$path"/new_webapp
done
这些都不涵盖任何特殊情况,例如如果 new_webapp 已经存在(错误检查/冲突解决),webapp 实际上是一个挂载点,或者是符号链接而不是实际目录,或者引用您正在重新创建的此目录结构的其他内容,则会发生什么情况设计。
因此,这可能比简单的重命名要复杂得多,这取决于情况。
但如果你问这些,你的问题并不清楚。
答案2
这应该有效:
find /tmp -depth -type d -name webapp -exec sh -c 'mv "${0}" "${0%/webapp}/new_webapp"' {} \;