リストされたディレクトリ内のすべてのファイルを1レベル上に移動します。

リストされたディレクトリ内のすべてのファイルを1レベル上に移動します。

ディレクトリツリーがあり、一部のディレクトリを削除し、すべてのファイルをそのディレクトリの1つ上のレベルに移動する必要があります。

ステップごとに行う方法を知っていますが、何千もの方法があるため、プロセスを最適化する必要があります。

ディレクトリを見つけてfind . -type d -name 'src'、見つかったディレクトリ内のすべてのファイルを1レベル上に移動する必要があります(../)。

root
- one
-- two
--- src
- three
-- four
--- five
---- src

最初のコンテンツはsrc次に移動し、two2番目のコンテンツは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 {} \;

まずはバックアップしてください。

おすすめ記事