Comment la sortie de ls -l
peut -elle être modifiée pour séparer les champs en utilisant des tabulations au lieu d'espaces? Je veux coller la sortie dans une feuille de calcul; le rembourrage avec un nombre variable d'espaces le rend difficile à faire. Pour illustrer:
racine racine de drwxr-xr-x 2 4096 26 sept. 11:43 wpa_supplicant -rw-r ----- 1 numérotation root 66 26 septembre 11:43 wvdial.conf drwxr-xr-x 9 root root 4096 8 octobre 08:21 X11 drwxr-xr-x 12 root root 4096 18 févr 23:31 xdg drwxr-xr-x 2 root root 4096 31 janvier 06:11 xml drwxr-xr-x 2 root root 4096 22 novembre 07:26 xul-ext -rw-r - r-- 1 racine root 349 13 janvier 2012 zsh_command_not_found
Dans l'extrait ls -l /etc
ci-dessus, les lignes 1, 2 et 3 ont un seul chiffre dans la colonne 2 tandis que la ligne 4 en a deux. Cela signifie que l'alignement est réalisé en utilisant deux espaces pour séparer les colonnes 1 et 2 dans les lignes 1-3, mais un seul espace dans la ligne 4.
ls
dit , l'analyse de sa sortie est correcte. C'est rarement l'objectif. On peut dire que c'est ici. Je pense que la méthode que vous avez utilisée est assez bonne (toute méthode produira des résultats indésirables compte tenu de certains besoins)! Cependant, l'analyse syntaxiquels
pourrait être meilleure. Prenons le cas d'un nom de fichier qui contient en fait un caractère de tabulation.ls -l
remplace l'onglet par un?
caractère. Votre script conserve le caractère de tabulation, qui créera des colonnes supplémentaires si sa sortie est interprétée comme délimitée par des tabulations et utilisée pour créer une feuille de calcul. Il se dégrade gravement si un nom de fichier a une nouvelle ligne.\n
ou\t
dans leurs noms. S'ils le font, l'analyse de la sortie dels
avec des commandes bash simples sera plus complexe, mais peut être réalisée. Je peux mettre à jour la réponse, si le PO souhaite gérer de tels cas.\n
et\t
en leur nom.printf "%s\t%s\t%s\t%s\r\n" $mod_month $mod_day $mod_time $file
et pour rediriger la sortie du fichier en tant que./ls_tab.sh > listing.txt
.Essayer:
Ou, si vos noms de fichiers ont des espaces:
la source
awk
. Intelligent!$9
ne change pas le fait que vous avezawk
toujours interprété les espaces comme indiquant une rupture entre les colonnes.$9
capture uniquement le premier mot dans cette position, et puisque les autres mots sont considérés comme des colonnes distinctes et de numéro supérieur, ils ne sont jamais imprimés du tout.Nous n'avons même pas besoin de convertir la sortie en tant que tabulé. L'espace entre les colonnes est juste assez fin.
Exécutez votre
ls -l
commande dans le terminal comme vous le faites normalement et copiez le contenu que vous souhaitez coller dans une feuille de calcul.Ensuite, ouvrez votre programme Spreadsheet (LibreOffice Calc dans mon cas) et appuyez sur Ctrl+ Vpour coller le contenu de votre presse-papiers.
L'assistant d'importation de texte apparaîtra. Assurez-vous de mettre une coche à côté
Space
et appuyez sur Ok. Vous pouvez regarder l'aperçu dans le volet inférieur.la source
python est bon pour cela:
la source