GNU/Linux >> Znalost Linux >  >> Linux

Extrahujte základní název souboru bez cesty a přípony v bash

Příkaz basename má dvě různá vyvolání; v jednom zadáte pouze cestu, v takovém případě vám poskytne poslední komponentu, zatímco v druhém zadáte také příponu, kterou odstraní. Takže můžete zjednodušit svůj příklad kódu pomocí druhého vyvolání basename. Dávejte si také pozor, abyste věci správně citovali:

fbname=$(basename "$1" .txt)
echo "$fbname"

Zde jsou vložky:

  1. $(basename "${s%.*}")
  2. $(basename "${s}" ".${s##*.}")

Potřeboval jsem to, stejně jako mě požádali bongbang a w4etwetewtwet.


Nemusíte volat externí basename příkaz. Místo toho můžete použít následující příkazy:

$ s=/the/path/foo.txt
$ echo "${s##*/}"
foo.txt
$ s=${s##*/}
$ echo "${s%.txt}"
foo
$ echo "${s%.*}"
foo

Upozorňujeme, že toto řešení by mělo fungovat ve všech posledních (po roce 2004 ) POSIX vyhovující shelly, (např. bash , dash , ksh , atd.).

Zdroj:Shell Command Language 2.6.2 Parameter Expansion

Více o manipulacích s bashovými strunami:http://tldp.org/LDP/LG/issue18/bash.html


Kombinace základního jména a řezu funguje dobře, dokonce i v případě dvojité koncovky jako .tar.gz :

fbname=$(basename "$fullfile" | cut -d. -f1)

Bylo by zajímavé, kdyby toto řešení potřebovalo menší aritmetický výkon než Bash Parameter Expansion.


Linux
  1. Jak skrýt soubory a složky ve Správci souborů bez přejmenování

  2. Úplný pohled na to, kde je v Bash nastavena proměnná cesty?

  3. Jak normalizujete cestu k souboru v Bash?

  1. najít a zkopírovat soubor pomocí Bash

  2. Získejte poslední dirname/filename v argumentu cesty k souboru v Bash

  3. Unix - vytvoření cesty ke složkám a souboru

  1. Jak extrahovat soubory .gz a .tar.gz v Linuxu

  2. Tar:Extrahovat jeden soubor do adresáře bez vytváření podsložek?

  3. Jak spustit soubor bez přípony .sh v shellu