
<premiered>
*.nfoファイル(サブディレクトリを含む)に含まれている行を削除したいと思います。
これが私が使用するコマンドです
find . -type f -name '*.nfo' -exec sh -c '
file="$0"
echo "$file"
sed -i -e '/<premiered>/d' "&file"
read line </dev/tty
' {} ';'
残念ながら、私が得るものは
-bash: premiered: No such file or directory
問題は何であり、どのように解決できますか?
答え1
問題は、引用符を入れ子にできないことです。閉鎖前に参照し/<premiered>/d
てから、もう一度開きます。これは<premiered>
呼び出しシェルに公開され<
、>
リダイレクト演算子として解釈されることを意味します。
実際、sedコマンドをシェルコマンドでラップする必要はありません。次の引数で直接実行できますfind ... -exec
。
find . -type f -name '*.nfo' -exec sed -i -e '/<premiered>/d' {} \;
ファイル名もエコーするには、別の次を追加してください-print
。
find . -type f -name '*.nfo' -print -exec sed -i -e '/<premiered>/d' {} \;