Portál AbcLinuxu, 30. dubna 2025 14:33

Parsování souborů s mezerou v názvu

Uvozovky

Pokud potřebujete zpracovat soubor s mezerou v názvu, můžete jednoduše použít uvozovky a napsat příkaz třeba cat "soubor s mezerou.txt".

Proměnná prostředí $IFS

Poté, co BASH provede expanzi zadaného řádku, rozdělí řádek na slova. A to tak, že jej roztrhne v místě výskytu znaků uvedených v proměnné $IFS (Input Field Separator), defaultní hodnota je [space][tab][newline]

$ cat seznam_souboru          # seznam souboru, na každém řádku jeden název souboru
soubor s mezerami v nazvu
dalsi soubor

$ cp $(cat seznam_souboru) slozka/    # bash rozdělí výstup $(cat soubor) na slova (jednotlivé argumenty pro cp)
cp: nelze získat informace o „soubor“: není souborem ani adresářem
cp: nelze získat informace o „s“: není souborem ani adresářem
cp: nelze získat informace o „mezerami“: není souborem ani adresářem
cp: nelze získat informace o „v“: není souborem ani adresářem
cp: nelze získat informace o „nazvu“: není souborem ani adresářem
cp: nelze získat informace o „dalsi“: není souborem ani adresářem
cp: nelze získat informace o „soubor“: není souborem ani adresářem

$ IFS=$'\n'                   # pouze znak nového řádku
$ cp $(cat seznam_souboru) slozka/    # nelekejte se té samé chyby, dané soubory na mém disku opravdu neexistují :D
cp: nelze získat informace o „soubor s mezerami v nazvu“: není souborem ani adresářem
cp: nelze získat informace o „dalsi soubor“: není souborem ani adresářem
Pokud to chcete používat v interaktivním terminálu nebo sourcovaném skriptu, tak na jeho konci uveďte unset IFS, čímž řeknete BASHi aby používal defaultní hodnotu [space][tab][newline], aby to pak nedělalo neplechu jinde.

Spojení find a xargs

Pokud je souborů ke zpracování více (například jako výsledek findu), pomůže kombinace
find ... -print0 | xargs -0 ...

Dokument vytvořil: miso, 21.10.2007 14:46 | Poslední úprava: Prcek, 22.5.2008 21:23 | Další přispěvatelé: tsLnox, depka | Historie změn | Zobrazeno: 2236×

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.