J'essaie de répertorier chaque .tar.gz
fichier, en utilisant uniquement la commande suivante:
ls *.tar.gz -l
... Il me montre la liste suivante:
-rw-rw-r-- 1 osm osm 949 Nov 27 16:17 file1.tar.gz
-rw-rw-r-- 1 osm osm 949 Nov 27 16:17 file2.tar.gz
Cependant, je dois juste l'énumérer de cette façon:
file1.tar.gz
file2.tar.gz
et pas non plus:
file1.tar.gz file2.tar.gz
Comment cela se fait-il "correctement"?
ls -1 *.tar.gz
, Mais que voulez - vous utiliser la liste pour ? Si vous faites quelque chose pour ces noms de fichiers, cels
n'est pas la bonne façon de le faire. Voir Pourquoi * pas * analyser `ls` (et que faire à la place)?man ls
. Assurez-vous que votre police d'affichage présente un bon contraste entre 1 (un) et l (lettre minuscule ell).Réponses:
L'
-1
option (le chiffre «un», et non «L» en minuscules) listera un fichier par ligne sans aucune autre information:la source
ls -1 *.tar.gz
fonctionne aussi bien.-
..hiddenfile
,benign.php
,evil.bin
,--hide=*evil*
; sans le--
vous ne verrez pasevil.bin
ou--hide=*evil*
.-2
(ou -3 etc.)! ;-)columns
!)Si vous n'avez besoin que des noms de fichiers, vous pouvez utiliser
printf
:... le shell étendra le
*.tar.gz
caractère générique aux noms de fichiers, puisprintf
les imprimera, chacun étant suivi d'une nouvelle ligne. Cette sortie serait légèrement différente de celle dels
dans le cas des noms de fichiers avec des retours à la ligne intégrés:installer
ls
printf
la source
ls -b
,ls -Q
, ls--quoting-style=...
.printf '%q\n'
. (Les deux GNU.)ls
se comporte différemment lorsque sa sortie est canalisée. Par exemple:Donc, si vous voulez voir tous vos
*.tar.gz
fichiers, un par ligne, vous pouvez le faire:Mais que faire si vous ne voulez pas diriger votre sortie? Autrement dit, existe-t-il un moyen de forcer la
ls
sortie des noms de fichiers un vers une ligne sans canaliser la sortie?Oui, avec l'
-1
interrupteur. (C'est un tiret avec le numéro 1.) Vous pouvez donc utiliser ces commandes:la source
Ou avec
GNU find
:Contrairement à
ls
avec*
elle recherchera des.tar.gz
fichiers récursive:la source
-printf '%P\n'
plutôt que juste-print
- à quel moment tout compatible Posixfind
fonctionnera.-print
ajoutera./
avant le nom de fichier.Une façon un peu plus détournée et bouclée :
EDIT: ajout de guillemets pour gérer les noms de fichiers étranges
la source
touch -- '-e \a.tar.gz'
pour une raison de citer vos variables et unix.stackexchange.com/q/65803/117549 pour des raisons d'utiliser printf au lieu d'echo-e \a.tar.gz
fichier résultantrm -- '-e \a.tar.gz'
devrait faire l'affaire--
marche pourrm
beaucoup d'autres.rm_etc './-x blah'