ls
s'imprime différemment selon que la sortie est vers un terminal ou vers autre chose.
par exemple:
$ ls .
file1 file2
$ ls . | head
file1
file2
Existe-t-il un moyen d' ls
imprimer sur une seule ligne comme s'il s'agissait d'un terminal alors qu'il ne l'est pas? Il y a un -C
argument selon lequel sorta fait cela, mais il le divisera en plusieurs lignes.
$ ls
file1 file10 file11 file12 file13 file14 file15 file16 file17 file18 file19 file2 file3 file4 file5 file6 file7 file8 file9
$ ls -C . | head
file1 file11 file13 file15 file17 file19 file3 file5 file7 file9
file10 file12 file14 file16 file18 file2 file4 file6 file8
La raison pour laquelle je veux le faire est que je veux surveiller les fichiers dans un répertoire qui changeait rapidement. J'avais construit cette simple ligne de commande:
while [[ true ]] ; do ls ; done | uniq
L'uniq l'empêche de spammer mon terminal et d'afficher uniquement les modifications. Cependant, il imprimait le tout sur des lignes différentes, ce qui rendait l'uniq inutile et augmentait la quantité de bruit. En théorie, on pourrait l'utiliser watch
pour cela, mais je voulais voir un fichier dès qu'il est apparu / disparu.
Voici la solution finale:
while [[ true ]] ; do ls | tr '\n' ' ' ; done | uniq