サーバー上のフォルダをクリーンアップするスクリプトの一部として、「YYYY_MM_DD」というディレクトリを見つけて、そのディレクトリの名前を「newName」に変更するfind regex(Macos 12.6.x)を作成しました。
サーバーをインストールしてからMacでスクリプトを実行することもできます。これをLinuxサーバーに移動し、gnu findを使用して実行する方が合理的かもしれませんが、bashスクリプトを学んでいるので、MacでテストしてからLinuxで実行するように変更する必要があります。
findコマンドをスクリプトに統合する前にテストしています。結果が正しいことを確認したい。
この find コマンドを実行すると、コマンドが動作しても「該当するファイルやディレクトリはありません」というエラーが発生します。
インターネット検索を試しましたが、コマンドを実行したときにこのエラーが発生する理由がわかりません。
find コマンドと結果は次のとおりです。
$ find -E ./ -type d -regex '.*([0-9]+(_[0-9]+)+)$' -execdir mv {} "newName" \;
find: .//folder1/folder2/2021_03_17: No such file or directory
「2021_03_17」というディレクトリを見つけて、希望の「newName」に名前を変更しました。
「該当するファイルやディレクトリがありません」と表示されるのはなぜですか?
答え1
良い実行コマンド:
find -E ./foo -type d -regex '.*([0-9]+(_[0-9]+)+)$' -depth -execdir mv {} "newName" \;
vagrant@freebsd:~ % tree foo
foo
└── bar
└── 2023_02_23
3 directories, 0 files
vagrant@freebsd:~ % find -E ./foo -type d -regex '.*([0-9]+(_[0-9]+)+)$' -depth -execdir mv {} "newName" \;
vagrant@freebsd:~ % tree foo
foo
└── bar
└── newName
3 directories, 0 files