ディレクトリツリーがあり、一部のディレクトリを削除し、すべてのファイルをそのディレクトリの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 {} \;
まずはバックアップしてください。
答え2
src
各レベルにネストされたサブディレクトリがなく、最新のディレクトリレベルであると仮定したsrc
場合は、次の作業を実行する必要があります。
find . -path '*/src/*' -type f -execdir echo mv -t ../ {} +
答え3
私が知っている最も安全な方法は次のとおりです。
cd
「あなたのディレクトリはどこにありますか?」tar
次のようにしてどこかに保存します。tar -cvf
"保存するファイル名、例:/tmp/mysavfil.tar" "すべてのディレクトリ名、例:foo bar etc"これで、次のようになります。tar -cvf /tmp/mysavfil.tar foo bar
- 次に、次のようにします。
cd ..
- それから:
tar xvf /tmp/mysavfil.tar
- または、不要になったファイルを削除するには、次のようにします。
cd
「ファイルがあった元の場所」rm -rf foo bar
。rm /tmp/mysavefiltar
- 君は終わった
より簡単な方法は次のとおりです。
mv foo bar ../.