web-dev-qa-db-fra.com

"rm" n'accepte pas la commande interne comme paramètre

Pourquoi ça ne marche pas?

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

Peut-être y a-t-il un caractère que rm n'accepte pas?

5
Vojta

Regardez attentivement et vous remarquerez qu'il a intégré des guillemets simples, que vous devrez supprimer vous-même. Je changerais le awk en sed:

rm $(gsettings get org.gnome.desktop.background picture-uri |
     sed -e "s/'//g" -e 's,file://,,g')

(Bien qu'en fait, je regarderais exactement à quoi ressemble la sortie non modifiée de gsettings en premier, afin de rendre quelque chose un peu plus à l'épreuve des balles.)

6
geekosaur

Il semble que vous ayez une paire supplémentaire de guillemets simples autour de votre nom de fichier qui doivent être supprimés.

Ici, j'ai un fichier nommé "bonjour":

$ ls
hello

Essayer de le supprimer avec des guillemets supplémentaires comme celui-ci:

$ rm "'hello'"

donne exactement le message d'erreur que vous voyez:

rm: cannot remove `\'hello\'': No such file or directory

les \' avant et après le nom sont des guillemets simples que vous devez supprimer.

ÉDITER:

Dans votre cas (comme un autre répondeur l’a noté), la sortie de

gsettings get org.gnome.desktop.background picture-uri

renvoie un résultat comme:

'file:///usr/share/backgrounds/Tie_My_Boat_by_Ray_Garc%C3%ADa.jpg'

Vous voulez donc supprimer le premier 'file:// et la fin '. Cela peut être fait correctement en utilisant sed comme ceci (en utilisant une seule expression avec un groupe)

sed -e "s|^'file://\(.*\)'$|\1|g"

ou peut-être plus facile à lire (en utilisant deux expressions simples)

sed -e "s|^'file://||g" -e "s|'$||"

Notez s'il vous plaît:

  • ^ correspond au début de la ligne
  • $ correspond à la fin de la ligne.
  • n'importe quel caractère peut être utilisé dans sed pour entourer la recherche et remplacer les expressions. Normalement, vous utiliseriez / mais dans ce cas, il est plus facile d'utiliser autre chose, donc j'utilise |.
10
mgd

gsettings get org.gnome.desktop.background picture-uri renvoie un résultat comme:

'file:///usr/share/backgrounds/Tie_My_Boat_by_Ray_Garc%C3%ADa.jpg'

Ces guillemets simples à la fin sont votre perte :-)

Je suppose que vous utilisez awk pour une raison et je vous propose deux solutions simples qui suppriment les guillemets avant d'alimenter la sortie de gsettings vers awk:

  • cut -d "'" -f2
  • tr "'" " "

Collez-les au milieu et vous avez terminé, par exemple:

 rm $ (gsettings get org.gnome.desktop.background picture-uri | 
 `cut -d" '"-f2` | sed -e" s /' // g "-e 's, fichier: // , g') 
 
 rm $ (gsettings get org.gnome.desktop.background picture-uri | 
 `tr" '"" " `| sed -e" s/'// g "-e' s, fichier: // , g ') 
3
ish

Cela fonctionnerait aussi (mais pas particulièrement sûr):

eval rm $(gsettings get org.gnome.desktop.background picture-uri  | awk '{gsub("file://","");print $0}')
0
jlliagre