GNU/Linux >> Znalost Linux >  >> Linux

AWK a názvy souborů s mezerou.

Problém je zde při analýze pomocí ls . Zvažte se podívat sem:Proč byste neměli analyzovat výstup ls.

Důvod, proč byste to neměli dělat, je ten, že UNIX povoluje v názvu souboru téměř jakýkoli znak, včetně mezer, nových řádků, čárek, symbolů svislých čar a v podstatě čehokoli, co byste se kdy pokusili použít jako oddělovač kromě NUL. Ve výchozím režimu, pokud standardní výstup není terminál, ls odděluje názvy souborů novými řádky. To je v pořádku, dokud nemáte soubor s novým řádkem v názvu.


Ach můj bože, to je hrozné.

Váš skript používá bash; Navrhuji, abyste místo toho udělali toto:

#!/bin/bash
for i in *.wav; do mv "${i}" "${i%.wav}.ext"; done

Viz Bash Guide pro více podrobností o rozšíření parametrů.


Můžeš zkusit tohle.

awk '{print substr($0, index($0,$9))}'

Například toto je výstup příkazu ls:

-rw-r--r--. 1 kořenový kořen 73834496 6. prosince 10:55 Soubor s mezerami 2

Pokud používáte jednoduchý awk, jako je tento

# awk '{print $9}'

Vrátí se pouze

# File

Pokud se použije s úplným příkazem

# awk '{print substr($0, index($0,$9))}'

Dostávám celý výstup

Soubor s mezerami 2

Heresubstr(s, a, b) :vrací b počet znaků z řetězce s, počínaje pozicí a. Parametr b je volitelný.

Pokud je například shoda adr:192.168.1.133 a použijete substr následovně

# awk '{print substr($2,6)}'

Získáte IP, tj. 192.168.1.133. Všimněte si, že 6 je znak začínající v adr

Takže ve správném příkazu je $2 $0 (který vytiskne celý řádek.) a index($0,$9) odpovídá $9 a vytiskne vše před sloupcem 9. Můžete to změnit na index($0,$8) a uvidíte, že se výstup změní do

# 10:55 File with spaces 2

`index(IN, FIND)'To vyhledá první výskyt řetězce IN v řetězci IN a vrátí pozici ve znacích, kde tento výskyt začíná v řetězci IN.

Doufám, že to pomůže. Navíc, pokud tuto hodnotu přiřazujete proměnné ve skriptu, musíte proměnné uzavřít do dvojitých uvozovek. V opačném případě se zobrazí chyby, pokud provádíte nějakou jinou operaci s názvem extrahovaného souboru.


Linux
  1. Šifrování a dešifrování souborů je s GPG snadné

  2. Šifrování a dešifrování souborů pomocí ccrypt

  3. Linux + Jak ignorovat (filtrovat) soubor s mezerou?

  1. Pro smyčku s názvy souborů?

  2. Najděte soubor pomocí příkazů Najít a najít v Linuxu

  3. Zachování oprávnění souborů a složek pomocí rsync

  1. Extrahování a zobrazení dat pomocí awk

  2. Připojte pomocí sshfs a oprávnění k zápisu do souboru

  3. dd s obs a seek vytvoří soubor neočekávané velikosti