Voj*_*jta 5 command-line bash rm gsettings
为什么这不起作用?
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
Run Code Online (Sandbox Code Playgroud)
也许有些性格rm不接受?
mgd*_*mgd 10
看起来您的文件名周围有一对额外的单引号字符需要删除。
在这里,我有一个名为“hello”的文件:
$ ls
hello
Run Code Online (Sandbox Code Playgroud)
试图用这样的额外单引号删除它:
$ rm "'hello'"
Run Code Online (Sandbox Code Playgroud)
准确地给出了您看到的错误消息:
rm: cannot remove `\'hello\'': No such file or directory
Run Code Online (Sandbox Code Playgroud)
在\'之前和名称后,你需要去掉单引号。
编辑:
在你的情况下(正如另一个回答者所指出的)输出
gsettings get org.gnome.desktop.background picture-uri
Run Code Online (Sandbox Code Playgroud)
返回如下结果:
'file:///usr/share/backgrounds/Tie_My_Boat_by_Ray_Garc%C3%ADa.jpg'
Run Code Online (Sandbox Code Playgroud)
所以你想去掉开头'file://和结尾'。这可以像这样正确使用sed(仅使用一个表达式与一组)
sed -e "s|^'file://\(.*\)'$|\1|g"
Run Code Online (Sandbox Code Playgroud)
或者更容易阅读(使用两个简单的表达式)
sed -e "s|^'file://||g" -e "s|'$||"
Run Code Online (Sandbox Code Playgroud)
请注意:
^ 匹配行的开头 $ 匹配行尾。sed包围搜索和替换表达式。通常,您会使用,/但在这种情况下使用其他东西更容易,所以我使用|.仔细观察,您会注意到它嵌入了单引号,您必须将其删除。我将更awk改为 a sed:
rm $(gsettings get org.gnome.desktop.background picture-uri |
sed -e "s/'//g" -e 's,file://,,g')
Run Code Online (Sandbox Code Playgroud)
(虽然实际上我会先看看未经修改的输出是什么样的gsettings,以便让一些东西更防弹。)