0


0

bashでファイルを見つけて別の場所にコピーし、フォルダーの深さを減らします

私は仲間のハードドライブを回復しようとしていますが、音楽と画像がどこにでもある構造はありませんが、名前付きフォルダには5フォルダ以上の深さがあり、ファイルとコピーを見つけるワンライナーを書くことができましたそれらをマウントされたドライブに保存しますが、ファイル構造は完全に保持されます。 私が望んでいるのは、ドライブを検索して別の場所にコピーし、完全なパスではなくmp3 / jpgファイルを含む親フォルダーのみをコピーするコードです。 私が持っている他の問題は、音楽が/folder/folder/folder/Artist/1.mp3..2.mp3..10.mp3などであるため、フォルダ 'Artist’を保存して、検索の希望を与える必要があります再び彼のトラック。

私が現在働いていること:

find /media/HP/ -name *.mp3 -fprintf /media/HP/MUSIC/Script.sh 'mkdir -p "/media/HP/MUSIC/%h" \n cp "%h/%f" "/media/HP/MUSIC/%h/"\n'

次に、script.shを実行すると、すべてのコピーが実行されます。

どうもありがとう

3 回答


1


おそらくやりたいことは、次のようなものです。

mkdir "$dest/$(basename $(dirname $source))"


1


わかりました。入力のおかげで、これについて深く考えるようになり、同僚の助けを借りて結果を出しました(SiGに感謝します)。

このワンライナーはファイルを見つけ、スクリプトファイルを作成して個別に実行しますが、最初に望んだように最後のフォルダーにコピーします。

コード:

find /some/folder/ -name *.mp3 |  awk 'BEGIN{FS="/"}{print "mkdir -p \"/some/new/place/" $(NF-1) "\"\ncp -v -p \"" $0 "\" \"/some/new/place/" $(NF-1) "/" $NF "\""}' > script.sh

出力は以下のとおりです。

mkdir -p "/media/HP/MUSIC/Satize"  cp -v -p "/media/HP/Users/REBEKAH/Music/Satize/You Don't Love Me.mp3" "/media/HP/MUSIC/Satize/You Don't Love Me.mp3"

script.shを実行すると、すべての作業が行われ、ファイル構造が非常に小さくなり、新しいドライブにコピーできます。

再び感謝します。 KjF


0


操作を再帰的に実行している場合(ディレクトリごとにディレクトリを入力する)、できることは、パスを毎回保存することです: Road_Dir = $(pwd)(たとえばdir1 / dir2 / dir3 /)

次に、artist_nameディレクトリを検出し、保存します `Music_Dir = $(pwd)`最後に、単純なコマンドでartist_nameディレクトリを抽出できます

Final_Dir = $ {Music_Dir ## $ Road_Dir /}($ Music_Dirの左から始まる$ Music_Dirから文字列$ Road_Dir /を取り出すことを意味します)

これにより、Final_Dirには「artist_name」が含まれ、音楽ファイルを$ Final_Dir / Music.mp3としてコピーできます…​