Příkaz basename v systému Linux vytiskne konečnou komponentu v cestě k souboru. To je užitečné zejména ve skriptech bash, kde chcete extrahovat název souboru z dlouhé cesty k souboru.
Dovolte mi, abych vám to ukázal na několika příkladech.
Příkaz Basename
Příkaz basename má dva druhy syntaxe. První obsahuje příponu:
basename PATH [suffix]
Druhý umožňuje přidat možnosti:
basename OPTION PATH
Možnosti nelze kombinovat s příponou. Nenechte se zatím zmást. Postupujte podle příkladů a pak pochopíte, co chci říct.
Použití příkazu basename s cestou k souboru poskytne název souboru:
basename /home/user/data/filename.txt
filename.txt
Příkaz basename je vlastně docela hloupý. Opravdu nerozpoznává cestu k souboru. Vyhledá pouze lomítka (/) a vypíše to, co je za posledním lomítkem.
Pokud například spustím výše uvedený příklad odstraněním názvu souboru, bude výsledkem následující.
basename /home/user/data
data
Odebrat příponu souboru s příponou
Primárním použitím příkazu bash je extrahování názvu souboru z cesty k souboru. Příponu souboru můžete také odstranit při extrahování názvu souboru.
Stačí uvést, co chcete z konce výstupu odstranit. Řekněme, že chcete odstranit soubor .txt z souboru filename.txt. Stačí jej přidat na konec příkazu basename:
basename /home/user/data/filename.txt .txt
filename
Můžete také použít volbu -s pro příponu:
basename -s .txt /home/user/data/filename.txt
filename
Přípona je odstraněna z konce poslední složky vstupu. Opravdu nezjišťuje příponu souboru. Pokud zadáte txt (bez tečky) místo .txt, dostanete ‘název souboru.’ (s tečkou na konci).
Také, pokud zadáte příponu, která není na konci komponenty, výstup zůstane, jako by žádná přípona nebyla.
basename /home/user/data/filename.txt name
filename.txt
Použití základního názvu s více cestami
S volbou -a
, můžete použít více cest současně.
basename -a /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1.txt
filename2.txt
Můžete použít možnost přípony -s
s -a
ale s určitými omezeními. Ke všem cestám k souboru můžete zadat pouze jednu příponu.
basename -as .txt /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1
filename2
Nemůžete přiřadit jednotlivé dostatečnosti. Nebude to fungovat.
Výstup můžete také oddělit pomocí NULL místo nového řádku pomocí -z
možnost.
Použití basename ve skriptu bash
Ukázal jsem několik příkladů příkazu basename. Podívejme se na několik příkladů základního jména ve skriptech bash.
Předpokládejme, že máte proměnnou cesty k souboru a chcete uložit název souboru z cesty do proměnné. Může to být jednoduchý skript:
pathname="/home/dir/data/filename"
result=$(basename "$pathname")
echo $result
Dalším příkladem je místo, kde chcete přejmenovat přípony souborů. Samozřejmě můžete použít příkaz rename pro dávkové přejmenování souborů, ale toto je pouze příklad.
Napsal jsem tedy tento ukázkový skript za účelem nahrazení přípon souborů:
for file in *$1; do
if [ -f $file ]; then
mv $file `basename $file .$1`.$2
fi
done
Všimli jste si, že jsem ve skriptu bash zkontroloval, zda je to soubor nebo ne, aby to nezměnilo odpovídající adresář?
Výše uvedený skript můžete použít takto:
./myscript.sh html htm
A přejmenuje všechny soubory v aktuálním adresáři s html na konci na htm.
To bylo jen několik příkladů. Můžete jej použít podle svých požadavků.
Příkaz basename je doplněn příkazem dirname. Na rozdíl od basename vypíše příkaz dirname celou cestu kromě poslední komponenty.
Doufám, že se vám tento návod líbil. Jako vždy můžete klást otázky nebo poskytovat návrhy v sekci komentářů.