GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo enumero un nombre de archivo por línea de salida en Linux?

Sí, puedes hacer fácilmente ls generar un nombre de archivo por línea:

ls -a | cat

Explicación:El comando ls detecta si la salida es a una terminal o a un archivo o tubería y se ajusta en consecuencia.

Entonces, si canalizas ls -a a python debería funcionar sin ninguna medida especial.


puedes usar ls -1

ls -l también hará el trabajo


Usa el -1 opción (tenga en cuenta que este es un dígito "uno", no una letra "L" minúscula), así:

ls -1a

Primero, sin embargo, asegúrese de que su ls admite -1 . GNU coreutils (instalado en sistemas Linux estándar) y Solaris; pero en caso de duda, utilice man ls o ls --help o consultar la documentación. Por ejemplo:

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

Ls está diseñado para el consumo humano y no debe analizar su salida.

En los scripts de shell, hay algunos casos en los que analizar la salida de ls es la forma más sencilla de lograr el efecto deseado. Dado que ls puede manipular caracteres no ASCII y de control en los nombres de archivo, estos casos son un subconjunto de aquellos que no requieren obtener un nombre de archivo de ls .

En python, no hay absolutamente ninguna razón para invocar ls . Python tiene todos los ls La funcionalidad de incorporada. Usa os.listdir para listar el contenido de un directorio y os.stat o os para obtener los metadatos del archivo. Otras funciones en el os Es probable que los módulos también sean relevantes para su problema.

Si está accediendo a archivos remotos a través de ssh, una forma razonablemente sólida de enumerar los nombres de los archivos es a través de sftp:

echo ls -1 | sftp remote-site:dir

Esto imprime un nombre de archivo por línea y, a diferencia del ls utilidad, sftp no altera los caracteres no imprimibles. Aún no podrá enumerar de manera confiable los directorios donde el nombre de un archivo contiene una nueva línea, pero eso rara vez se hace (recuerde esto como un posible problema de seguridad, no como un problema de usabilidad).

En python (tenga en cuenta que los metacaracteres de shell deben ser escapes en remote_dir ):

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

Para interacciones más complejas, busque el modo por lotes de sftp en la documentación.

En algunos sistemas (Linux, Mac OS X, quizás algunos otros unices, pero definitivamente no en Windows), un enfoque diferente es montar un sistema de archivos remoto a través de ssh con sshfs y luego trabajar localmente.


Linux
  1. Cómo agregar números de línea a archivos de texto en Linux

  2. ¿Cómo mover una línea en un archivo de texto hacia arriba o hacia abajo una línea?

  3. Cómo contar líneas en un archivo en UNIX/Linux

  4. ¿Cómo imprimir la salida del comando Linux en un archivo?

  5. ¿Cómo enumero los bloques de datos de un archivo en Linux?

Cómo crear un archivo en Linux usando Terminal/Línea de comando

Cómo crear un archivo en Linux

Cómo guardar la salida del comando de Linux en una imagen o un archivo de texto

Cómo vincular un archivo en Linux

Cómo encontrar las líneas más largas en un archivo en Linux

Cómo extraer el archivo Tar.xz en la línea de comandos de Linux