这为什么不起作用?
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
不接受?
答案1
看起来您的文件名周围有一对多余的单引号字符需要删除。
这里,我有一个名为“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
(仅使用一个带有组的表达式)
sed -e "s|^'file://\(.*\)'$|\1|g"
或者可能更容易阅读(使用两个简单的表达式)
sed -e "s|^'file://||g" -e "s|'$||"
请注意:
^
匹配行首$
匹配行的末尾。- 任何字符都可用于
sed
包围搜索和替换表达式。通常,您会使用/
但在这种情况下,使用其他字符更方便,因此我使用|
。
答案2
仔细查看,您会发现它嵌入了单引号,您必须自己将其删除。我会将其更改awk
为sed
:
rm $(gsettings get org.gnome.desktop.background picture-uri |
sed -e "s/'//g" -e 's,file://,,g')
(尽管实际上我会首先查看未修改的输出到底gsettings
是什么样子,以便使某些东西更加可靠。)
答案3
gsettings get org.gnome.desktop.background picture-uri
返回如下结果:
'file:///usr/share/backgrounds/Tie_My_Boat_by_Ray_Garc%C3%ADa.jpg'
结尾的单引号是你的败笔 :-)
gsettings
我假设您使用 awk 是有原因的,并且为您提供两个简单的解决方案,在将输出提供给之前删除引号awk
:
cut -d "'" -f2
tr "'" " "
把它们粘在中间就完成了,例如:
rm $(gsettings 获取 org.gnome.desktop.background 图片 uri | `cut -d“'”-f2`|sed-e“s/'//g”-e's,file://,,g') rm $(gsettings 获取 org.gnome.desktop.background 图片 uri | `tr“'”““`|sed-e“s/'//g”-e's,file://,,g')
答案4
这也可以起作用(尽管不是特别安全):
eval rm $(gsettings get org.gnome.desktop.background picture-uri | awk '{gsub("file://","");print $0}')