ディレクトリツリーがあり、一部のディレクトリを削除し、すべてのファイルをそのディレクトリの1つ上のレベルに移動する必要があります。
ステップごとに行う方法を知っていますが、何千もの方法があるため、プロセスを最適化する必要があります。
ディレクトリを見つけてfind . -type d -name 'src'
、見つかったディレクトリ内のすべてのファイルを1レベル上に移動する必要があります(../
)。
root
- one
-- two
--- src
- three
-- four
--- five
---- src
最初のコンテンツはsrc
次に移動し、two
2番目のコンテンツはsrc
次に移動する必要があります。five
スクリプトでこれを行うにはどうすればよいですか?
ベストアンサー1
それは次のとおりです。
find . -type d -name src -exec sh -c 'cd "$1"; for f in *; do mv -i "$f" .. ; done' find-sh {} \;
-i
と表示されていますので参考にしてくださいmv
。何を扱うかを確認するように求められたら、そうすることを期待しない限り、「いいえ」と答える必要があります。
src
後でこのディレクトリも削除したいと言ったので、次のようにします。
find . -type d -name src -exec sh -c 'cd "$1"; for f in *; do mv -i "$f" .. ; done' find-sh {} \; -exec rmdir {} \;
まずはバックアップしてください。