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
Réponses:
je ne connais pas de commutateur qui pourrait faire cela, mais vous pouvez diriger votre sortie
tr
pour le faire:la source
Cela fonctionne pour moi, c'est la manière la plus simple que j'ai jamais trouvée. J'espère que cela vous aidera aussi.
la source
Si vous avez
ls
cette option, vous pouvez utiliser une valeur élevée et elle pourrait faire ce que vous voulez:la source
ah, maintenant que vous avez mis à jour la question ....
fera ce que vous avez posté, simplement plus simple.
cependant, il vaut mieux utiliser quelque chose qui utilise inotify pour ce faire .. comme
si vous n'avez pas d'inotify, alors quelque chose comme ça fonctionne bien aussi:
la source
Qu'en est-il du tout trivial
? :-) Vous n'avez même pas besoin de le bifurquer. :-)
la source
C'est peut-être ce que vous cherchez, mais j'ai peut-être mal compris votre question, mais voici :)
Quelques commandes qui méritent d'être examinées:
watch - exécuter un programme périodiquement, montrant les xargs en plein écran de sortie - construire et exécuter des lignes de commande à partir de l'entrée standard (-0 si vous voulez gérer des fichiers avec des espaces, etc.)
Vous pouvez faire quelque chose comme ce qui suit pour afficher les 10 derniers fichiers / répertoires qui ont changé avec un intervalle de 2 secondes (par défaut pour la montre)
les options -lart indiquent à ls d'être détaillé et de trier en fonction de l'heure de modification.
Si vous voulez vraiment juste les fichiers, je ferais juste quelque chose comme:
ou juste pour les afficher:
la source
Vous pouvez utiliser des tiques inversées dans le shell pour y parvenir comme:
la source
touch ./-en
[a-d]
ce type avant. Si vous l'exécutez dans un script,echo -E
ce ne serait pas trop gênant et le retour à la ligne pourrait ne pas avoir d'importance.Cela a fonctionné pour moi car j'avais besoin non seulement d'imprimer le résultat sur une seule ligne, mais aussi de spécifier comment il devait être séparé et vous pouvez le spécifier avec ORS
la source