Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

caractères < 32 dans nom de fichier

1 réponse
Avatar
Stan
bonjour,

à l'aide d'une commande comme celle-ci :
"ls *.txt | xargs rm -f" , je suis confronté à un échec
lorsque le nom du fichier contient des caractères spéciaux ( non imprimable,
comme 0x02 ).
Le fichier n'est pas supprimé.

Lors d'un ls ces caractères apparaissent sous forme de point d'intérogation
( freeBSD ).

Une idée pour parvenir au resultat souhaité ?

--
-Stan

1 réponse

Avatar
Stephane Chazelas
2006-12-19, 11:02(+01), Stan:

bonjour,

à l'aide d'une commande comme celle-ci :
"ls *.txt | xargs rm -f" , je suis confronté à un échec
lorsque le nom du fichier contient des caractères spéciaux ( non imprimable,
comme 0x02 ).
Le fichier n'est pas supprimé.

Lors d'un ls ces caractères apparaissent sous forme de point d'intérogation
( freeBSD ).


Il ne devrait pas apparaitre sous forme de point d'interrogation
quand l'output de ls est un pipe.

Toutefois les characteres <Tab> and <Newline> (et backslash et
single et double quotes et space) ont une signification
particuliere pour xargs.

Une idée pour parvenir au resultat souhaité ?


rm -f -- *.txt



Si les noms de fichiers n'ont pas de double-quotes:

printf '"%s"n' *.txt | xargs rm -f --

(en supposant que printf est builtin dans ton shell)

Sinon:

find . ! -name . -prune ! -name '.*' -name '*.txt' -exec
rm -f {} +

Ou avec zsh:

autoload zargs
zargs ./*.txt -- rm -f

--
Stéphane