GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso elencare un nome file per riga di output in Linux?

Sì, puoi creare facilmente ls genera un nome file per riga:

ls -a | cat

Spiegazione:Il comando ls rileva se l'output è su un terminale o su un file o una pipe e si regola di conseguenza.

Quindi, se invii ls -a in Python dovrebbe funzionare senza misure speciali.


puoi usare ls -1

ls -l farà anche il lavoro


Usa il -1 opzione (nota che questa è una cifra "una", non una lettera minuscola "L"), come questa:

ls -1a

Prima, però, assicurati che il tuo ls supporta -1 . GNU coreutils (installato su sistemi Linux standard) e Solaris lo fanno; ma in caso di dubbio, usa man ls o ls --help o controllare la documentazione. Ad esempio:

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

Ls è progettato per il consumo umano e non dovresti analizzare il suo output.

Negli script di shell, ci sono alcuni casi in cui l'analisi dell'output di ls funziona è il modo più semplice per ottenere l'effetto desiderato. Dal momento che ls potrebbe manipolare i caratteri non ASCII e di controllo nei nomi dei file, questi casi sono un sottoinsieme di quelli che non richiedono l'ottenimento di un nome file da ls .

In Python, non c'è assolutamente alcun motivo per invocare ls . Python ha tutto ls funzionalità integrate. Usa os.listdir per elencare il contenuto di una directory e os.stat o os per ottenere i metadati del file. Altre funzioni nel os è probabile che anche i moduli siano rilevanti per il tuo problema.

Se stai accedendo a file remoti tramite ssh, un modo ragionevolmente affidabile per elencare i nomi dei file è tramite sftp:

echo ls -1 | sftp remote-site:dir

Questo stampa un nome di file per riga e diversamente da ls utilità, sftp non altera i caratteri non stampabili. Non sarai comunque in grado di elencare in modo affidabile le directory in cui un nome di file contiene una nuova riga, ma questo viene fatto raramente (ricorda questo come un potenziale problema di sicurezza, non un problema di usabilità).

In python (attenzione che i metacaratteri della shell devono essere escape in remote_dir ):

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

Per interazioni più complesse, cerca la modalità batch di sftp nella documentazione.

Su alcuni sistemi (Linux, Mac OS X, forse altri Unix, ma sicuramente non Windows), un approccio diverso consiste nel montare un filesystem remoto tramite ssh con sshfs e quindi lavorare in locale.


Linux
  1. Come salvare l'output dei comandi in un file in Linux

  2. Come copiare le autorizzazioni e la proprietà dei file su un altro file in Linux

  3. Come spostare una riga in un file di testo su o giù di una riga?

  4. Come rinominare un file in Linux?

  5. Come sostituire un file in jar con la riga di comando in Linux?

Come creare un file in Linux utilizzando Terminale/riga di comando

Come creare un file in Linux

Come salvare l'output dei comandi di Linux in un'immagine o in un file di testo

Come collegare simbolicamente un file in Linux

Come trovare le righe più lunghe in un file in Linux

Come estrarre il file Tar.xz sulla riga di comando di Linux