GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu uvést jeden název souboru na výstupní řádek v Linuxu?

Ano, můžete snadno vytvořit ls výstup jednoho souboru na řádek:

ls -a | cat

Vysvětlení:Příkaz ls zjistí, zda je výstup na terminál nebo do souboru nebo roury, a podle toho se přizpůsobí.

Pokud tedy použijete potrubí ls -a do pythonu by to mělo fungovat bez jakýchkoliv zvláštních opatření.


můžete použít ls -1

ls -l také udělá práci


Použijte -1 možnost (všimněte si, že se jedná o „jednu“ číslici, nikoli o malé písmeno „L“), například takto:

ls -1a

Nejprve se však ujistěte, že máte ls podporuje -1 . GNU coreutils (instalovaný na standardních systémech Linux) a Solaris ano; ale pokud máte pochybnosti, použijte man ls nebo ls --help nebo zkontrolujte dokumentaci. Např.:

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

Ls je určen pro lidskou spotřebu a neměli byste analyzovat jeho výstup.

Ve skriptech shellu existuje několik případů, kdy analýza výstupu ls funguje, je nejjednodušší způsob, jak dosáhnout požadovaného efektu. Protože ls může v názvech souborů zkazit jiné než ASCII a řídicí znaky, jsou tyto případy podmnožinou těch, které nevyžadují získání názvu souboru z ls .

V pythonu není absolutně žádný důvod vyvolávat ls . Python má všechny ls vestavěná funkce. Použijte os.listdir pro výpis obsahu adresáře a os.stat nebo os k získání metadat souboru. Další funkce v os moduly budou pravděpodobně také relevantní pro váš problém.

Pokud přistupujete ke vzdáleným souborům přes ssh, přiměřeně robustní způsob, jak vypsat názvy souborů, je přes sftp:

echo ls -1 | sftp remote-site:dir

To vytiskne jeden název souboru na řádek a na rozdíl od ls nástroj, sftp nemanipuluje netisknutelné znaky. Stále nebudete schopni spolehlivě vypsat adresáře, kde název souboru obsahuje nový řádek, ale to se dělá jen zřídka (pamatujte to jako potenciální problém se zabezpečením, nikoli problém s použitelností).

V pythonu (pozor, metaznaky shellu musí být escape v remote_dir ):

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

Pro složitější interakce vyhledejte dávkový režim sftp v dokumentaci.

Na některých systémech (Linux, Mac OS X, možná některé jiné Uniices, ale rozhodně ne Windows) je jiný přístup připojit vzdálený souborový systém přes ssh s sshfs a pak pracovat lokálně.


Linux
  1. Jak zkopírovat oprávnění a vlastnictví souboru do jiného souboru v Linuxu

  2. Linux – Jak lze zkontrolovat informace o struktuře adresářů souboru Unix/linux?

  3. Jak přejmenovat soubor v Linuxu?

  1. Jak uložit výstup příkazu do souboru v Linuxu

  2. Jak počítat řádky v souboru v UNIX/Linux

  3. Jak nahradit soubor v jar příkazovým řádkem v linuxu?

  1. Jak extrahovat soubor tar.gz v Linuxu pomocí příkazového řádku

  2. Jak přidat čísla řádků do textových souborů v systému Linux

  3. Jak přesměrovat výstup do souboru a Stdout v Linuxu