空でない何百ものディレクトリの名前変更

空でない何百ものディレクトリの名前変更

オペレーティングシステムは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"' {} \;

関連情報