次のようなこの投稿注: エラーなしでfind
and コマンドを実行できますが、ファイル名は同じままです。sed
服を脱がせようとしていますの発音_de_現在のディレクトリのすべてのmp3:
pronunciation_de_wählen.mp3
pronunciation_de_wange.mp3
pronunciation_de_weil.mp3
pronunciation_de_werden.mp3
pronunciation_de_zentrum.mp3
コマンドの問題を解決する前にクイックステータスチェック:
find . -name "*.mp3"
現在のディレクトリのすべてのmp3を返します。これでこの部分がうまくいくことがわかりました。
sed --version
返品sed (GNU sed) 4.4
私は走るfind . -name "*.mp3" -exec sed -i 's/pronunciation_de_//g' {} \;
何が起こっているのか完全に理解していることを確認するには、次の手順を実行します。
find .
走る探す現在のディレクトリのコマンドです。
-name "*.mp3"
すべての.mp3ファイル形式を返します。
-exec
入力してコマンドを実行します。
sed -i
これ-私遷移とは、(一時的な)コピーではなく、実際のファイルで作業することを意味します。
のため's/old_word/new_word/g'
:
- これSsedを代替モードに設定します。
- /古い単語交換したい言葉です。
- /新しい単語交換したい言葉です。私の例では空です。
- / G最初の一致だけでなく、すべての一致に置換を適用します。
{}
この文字列は、各反復中にファイル名に置き換えられます。
\;
セミコロン終了探す注文する。バックスラッシュはセミコロン文字をエスケープし、シェルが文字通り解釈するのを防ぎます。
私はこの情報のほとんどをランダムなブログとStack Exchangeの投稿から入手します。
-exec オプションについてfind
findの-execコマンドで{} +はどういう意味ですか?
ほぼ確実に重複するこの質問を投稿する前に、時間をかけて実験して調査したいのですが、完全に詰まっています!
ベストアンサー1
find -exec ...
1行のシェルスクリプトを使用して交換を実行できます。
find . -name "*.mp3" -type f -exec bash -c 'mv "$1" "${1/pronunciation_de_}"' bash {} \;
ファイル名は実行中のbashプロセスにパラメータ{}
として渡され、bashのパラメータ拡張機能が使用され、inが最初に表示される場合は空の文字列に置き換えられます。$1
${1/pronunciation_de_}
pronunciation_de_
$1
追加オプションを使用すると、通常のファイルのみが一致する-type f
ことを確認できます。