今日、私はシェルコマンドが私が全く理解していないいくつかのオーディオファイルで予期しない結果を生成するケースを提出しました。
事実は次のとおりです。
私のオペレーティングシステムはArchLinux、Windows管理者はAwesome、私が使用する端末はKonsoleです。
',{,[,?,!
スペースや特定の文字を削除して名前を変更したいので、スペースや特定の文字を含むディレクトリやファイルがたくさんあります。シェルコマンドの検索中に文字を次に置き換えるコマンドが見つかり
_
ました.
。
$find ./ -type f -exec sed -i -e 's/_/./g' {}\;
- すべてのファイルの名前が期待どおりに変更された複数のディレクトリでこのコマンドを使用していました。
しかし、
- 名前を変更したいオーディオファイルを含むディレクトリがあり、このディレクトリにこのbashコマンドを適用しました。以前の使用とは異なり、プロセスははるかに長くかかり、最終結果が期待したものとは異なります。まず、ほとんどのファイル名はまだ変更されていません。次に、すべてのオーディオファイル(mp3、flac...)が変更/破損し、オーディオファイルリーダーで認識されなくなりました。対照的に、bashコマンドを使用しないオーディオファイルは常に正確で読みやすいです。
たとえば、smplayerを使用して変更されたファイルの1つを読み取ろうとすると、次のエラーメッセージが表示されます。 MPlayer / mpvが予期せず完了しました。終了コード:2.ログファイルに「ファイル形式が認識されません」と追加されます。
最初の回答を参照して、変更の影響に関する追加情報を以下に提供します。
私が望むものを得るために3つのコマンドを使用しました。
./ -type f -exec sed -i -e 's/_/./g' {} \;
./ -type f -exec sed -i -e 's/ /./g' {} \;
./ -type f -exec sed -i -e 's/.././g' {} \;
以下は、破損前>破損後のファイル名の例です。
1_-_Bob_The_Sponge_-_Living under the Sea.flac > 1.-.Bob.The.Sponge.-. Living.under the Sea.flac (一部の空白がまだ残っていることに注意してください)
2_-_Bob_The_Sponge_-_Nemo_my_friend.mp3 > 2.-.Bob_The.Sponge.-.Nemo my.friend.mp3 ("_" 1つは削除されず、名前にスペースが1つ追加されました。)
ここですべての状況を再現することはできず、ファイル名が変更されたものもあり、部分的なものもあり、まだ以前のようなものもあります。
変更されたファイルの重みは変更されず、そのファイルの権限も変更されませんでした。最後の修正日のみが変更されました。
もちろん、何が起こっているのか知りたいです。別のブラウザを使用して説明を検索しましたが、類似または類似のコンテンツが見つかりませんでした。
だから私の質問は次のとおりです。
- このbashコマンドがこれらのオーディオファイルを変更するように見えるのはなぜですか?
- このコマンドがこのタイプのファイルでは機能しますが、他のファイルでは機能しません。
- このコマンドによってこれらのファイルに加えられた破損を元に戻すことができる解決策はありますか?
答え1
次のコマンドを使用しました。
find ./ -type f -exec sed -i -e 's/_/./g' {} \;
これは基本的に何をしますか
sed -i -e 's/_/./g' filename
find
コマンドで見つかった各ファイルについて。sed
ファイルを1行ずつ見てs
(replace)コマンドを使用して、各_
ファイルを.
。-i
ファイルが破損しているのも当然です!
古いファイルはコピーできません。あなたは変わり_
、到着
..
しました.
。あなたが知っているのは、.
ファイル内のすべての文字がおそらく.
これらの文字の1つ(または)であるということです。