重命名数百个非空目录

重命名数百个非空目录

操作系统是 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"' {} \;

相关内容