なぜこれが機能しないのですか?
rm $(gsettings get org.gnome.desktop.background picture-uri | awk '{gsub("file://","");print $0}')
rm: cannot remove `\'/home/foggy/obrazky/wallpapers/24/Dark_Oxygen_by_Falco101.png\'': No such file or directory
_rm
が受け入れない文字があるのでしょうか?
よく見ると、一重引用符が埋め込まれていることがわかります。これは自分で削除する必要があります。 awk
をsed
に変更します。
rm $(gsettings get org.gnome.desktop.background picture-uri |
sed -e "s/'//g" -e 's,file://,,g')
(実際、私はgsettings
の変更されていない出力が最初にどのように見えるかを正確に調べて、何かをもう少し完全なものにしています。
削除する必要があるファイル名の前後に一組の単一引用符が余分にあるようです。
ここに、「hello」という名前のファイルがあります。
$ ls
hello
次のような余分な一重引用符でそれを削除しようとしています:
$ rm "'hello'"
あなたが見るエラーメッセージを正確に与えます:
rm: cannot remove `\'hello\'': No such file or directory
名前の前後の\'
は、削除する必要がある単一引用符です。
編集:
あなたの場合(別の回答者が指摘したように)の出力
gsettings get org.gnome.desktop.background picture-uri
次のような結果を返します:
'file:///usr/share/backgrounds/Tie_My_Boat_by_Ray_Garc%C3%ADa.jpg'
したがって、先頭の'file://
と末尾の'
を取り除きます。これは、このようにsed
を使用して正しく行うことができます(グループで1つの式のみを使用)
sed -e "s|^'file://\(.*\)'$|\1|g"
または多分読みやすい(2つの単純な式を使用)
sed -e "s|^'file://||g" -e "s|'$||"
ご注意ください:
^
は行の先頭に一致します$
は行末と一致します。sed
で任意の文字を使用して、検索を囲み、式を置き換えることができます。通常は/
を使用しますが、この場合は他のものを使用する方が簡単なので、|
を使用します。gsettings get org.gnome.desktop.background picture-uri
は次のような結果を返します。
'file:///usr/share/backgrounds/Tie_My_Boat_by_Ray_Garc%C3%ADa.jpg'
最後のこれらの単一引用符はあなたの元に戻すです:-)
何らかの理由でawkを使用していると想定し、gsettings
の出力をawk
に送る前に引用符を取り除く2つの簡単な解決策を示します。
cut -d "'" -f2
tr "'" " "
それらを中央に貼り付ければ完了です、例えば:
rm $(gsettings get org.gnome.desktop.background picture-uri | `cut -d" '"-f2` | sed -e" s /' // g "-e 's、file:// , g') rm $(gsettings get org.gnome.desktop.background picture-uri | `tr" '"" " `| sed -e" s/'// g "-e' s、file:// , g ')
これも機能します(特に安全ではありません)。
eval rm $(gsettings get org.gnome.desktop.background picture-uri | awk '{gsub("file://","");print $0}')