GNU/Linux >> Tutoriels Linux >  >> Linux

Comment lister un nom de fichier par ligne de sortie sous Linux ?

Oui, vous pouvez facilement créer ls afficher un nom de fichier par ligne :

ls -a | cat

Explication :La commande ls détecte si la sortie est vers un terminal ou vers un fichier ou un tube et s'ajuste en conséquence.

Donc, si vous pipez ls -a en python cela devrait fonctionner sans aucune mesure particulière.


vous pouvez utiliser ls -1

ls -l fera également le travail


Utilisez le -1 option (notez qu'il s'agit d'un chiffre "un", pas d'une lettre minuscule "L"), comme ceci :

ls -1a

Mais d'abord, assurez-vous que votre ls supporte -1 . GNU coreutils (installé sur les systèmes Linux standard) et Solaris le font ; mais en cas de doute, utilisez man ls ou ls --help ou consultez la documentation. Ex. :

$ man ls
...
       -1     list one file per line.  Avoid '\n' with -q or -b

Ls est conçu pour la consommation humaine et vous ne devez pas analyser sa sortie.

Dans les scripts shell, il existe quelques cas où l'analyse de la sortie de ls fonctionne est le moyen le plus simple d'obtenir l'effet souhaité. Étant donné que ls peut mutiler les caractères non ASCII et de contrôle dans les noms de fichiers, ces cas sont un sous-ensemble de ceux qui ne nécessitent pas l'obtention d'un nom de fichier à partir de ls .

En python, il n'y a absolument aucune raison d'invoquer ls . Python a tout de ls la fonctionnalité intégrée. Utilisez os.listdir pour lister le contenu d'un répertoire et os.stat ou os pour obtenir les métadonnées du fichier. Autres fonctions dans le os modules sont susceptibles d'être également pertinents pour votre problème.

Si vous accédez à des fichiers distants via ssh, un moyen raisonnablement robuste de répertorier les noms de fichiers consiste à utiliser sftp :

echo ls -1 | sftp remote-site:dir

Cela imprime un nom de fichier par ligne, et contrairement au ls utilitaire, sftp ne modifie pas les caractères non imprimables. Vous ne pourrez toujours pas répertorier de manière fiable les répertoires où un nom de fichier contient une nouvelle ligne, mais cela est rarement fait (rappelez-vous qu'il s'agit d'un problème de sécurité potentiel et non d'un problème d'utilisation).

En python (attention, les métacaractères du shell doivent être des échappements en remote_dir ):

command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")

Pour des interactions plus complexes, recherchez le mode batch de sftp dans la documentation.

Sur certains systèmes (Linux, Mac OS X, peut-être d'autres unix, mais certainement pas Windows), une approche différente consiste à monter un système de fichiers distant via ssh avec sshfs, puis à travailler localement.


Linux
  1. Comment copier les autorisations et la propriété des fichiers dans un autre fichier sous Linux

  2. Comment extraire le fichier tar.gz sous Linux à l'aide de la ligne de commande

  3. Linux - Comment inspecter les informations de structure de répertoire d'un fichier Unix/linux ?

  4. Comment renommer un fichier sous Linux ?

  5. Comment compter les lignes d'un fichier sous UNIX/Linux

Comment créer un fichier sous Linux à l'aide d'un terminal/ligne de commande

Comment créer un fichier sous Linux

Comment enregistrer la sortie de la commande Linux dans une image ou un fichier texte

Comment créer un lien symbolique vers un fichier sous Linux

Comment trouver la ou les lignes les plus longues dans un fichier sous Linux

Comment extraire le fichier Tar.xz sur la ligne de commande Linux