愚かな間違いで、オーディオコレクションのほんの一部を失いました。:-(
残念ながら、かなり最近のバックアップがありましたが、それでもいらいらしていました。本当にあなたを除いて、いたずらをしている他の犯人はmv
、次のように表示されます:
オーディオファイルには特定のスキームがありました。
ARTIST - Some Title YY.mp3
ここYY
で、2桁の年の指定です。
mkdir 90<invisible control character>
(現時点では、目に見えない3分の1の余分な文字を実際に入力したことを知りませんでした...!)
1つのディレクトリにすべてを入れるのではなく、1990年代のすべての音楽を1つのディレクトリに入れたいと思いました。だから私は入力しました:
find . -name '* 9?.mp3' -exec mv {} 90 \;
何が起こったのかを理解するのはそれほど難しくありませんか?:->
(悲惨な)結果は、'90 something '(何かが "見えない"制御文字である)と呼ばれる新しい空のディレクトリと、'90 ' と呼ばれる単一のファイルで、n回上書きされました。
すべてのファイルがなくなった。:-(((明らかに)
ウィッシュmv
ただろうにチェック:先「ファイル」の署名が(* NIX上で覚えているかどうかを時間内にすべてですAファイルで始まる)d------
(例えばdrwxr-xr-x
)。そして、もちろん、宛先がまったく存在するかどうか。あなたは、単に前述のシナリオのバリエーションがあるのを忘れにmkdir
最初のディレクトリが。(もちろん、あなたはそれがそこにあると仮定しました...)
大文字のWで始まるペット嫌いのOSでさえ、これを行います。宛先のタイプ(ファイル?ディレクトリ?)を指定するように求められた場合でも、指定するように求められます。
したがって、* NIXersは、mv
これらの種類の最も望ましくない驚きを避けるために、「スクリプトレット」を作成する必要があるのではないかと考えています。
mv
ここでは問題ではありません。技術的には、一連のファイルを移動していることを知りません。mv
ファイルごとに1回実行しています。それがどのようにfind -exec ;
機能するかです。あなたが使用していた場合にはfind -exec +
(コメントのいくつかのように)mv
なり、それは複数の引数を持ってすぐに悲鳴を上げてきました。
mv
単一のファイルごとに実行することは、最初は少し考えられていないように見えますが、ソースファイルがさまざまなサブディレクトリに散らばると、それは(前述したように)唯一の正解です。私のテストケースでは、ソースファイルがすべて1つのディレクトリにあったということは、それが私の実際のテストケースであることを意味しません。それは実際には単純化に過ぎません。これについては後で自分で簡単に説明することができるからです。さらに、質問の長さが短縮されるため、質問の読み取り時間が短縮されます。:)
mv
宛先が存在することを要求するのはなぜですか?mv oldfile newfile
ファイルの名前を変更する方法であり、newfile
既に存在してディレクトリになることを期待するのはばかげています。
.mp3
は、という名前90
でそこに存在している必要があります。これは、バックアップがないものである可能性があります。