リストされたディレクトリ内のすべてのファイルを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 {} \;

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

答え2

src各レベルにネストされたサブディレクトリがなく、最新のディレクトリレベルであると仮定したsrc場合は、次の作業を実行する必要があります。

find . -path '*/src/*' -type f -execdir echo mv -t ../ {} +

答え3

私が知っている最も安全な方法は次のとおりです。

  1. cd「あなたのディレクトリはどこにありますか?」
  2. tar次のようにしてどこかに保存します。tar -cvf"保存するファイル名、例:/tmp/mysavfil.tar" "すべてのディレクトリ名、例:foo bar etc"これで、次のようになります。tar -cvf /tmp/mysavfil.tar foo bar
  3. 次に、次のようにします。cd ..
  4. それから:tar xvf /tmp/mysavfil.tar
  5. または、不要になったファイルを削除するには、次のようにします。cd「ファイルがあった元の場所」rm -rf foo barrm /tmp/mysavefiltar
  6. 君は終わった

より簡単な方法は次のとおりです。

  • mv foo bar ../.

関連情報