A volte, mentre lavori sulla riga di comando (soprattutto quando hai a che fare con gli script della shell), potresti essere interessato solo al nome del file, ma ciò che è disponibile per te è il percorso completo del file. Quindi, il requisito è rimuovere il componente della directory del percorso. Sarai felice di sapere che esiste un comando - basename - che fa questo lavoro.
In questo tutorial, discuteremo le basi di 'basename' usando alcuni esempi di facile comprensione. Ma prima di passare a questo, vale la pena ricordare che tutti gli esempi qui sono stati testati su una macchina Ubuntu 16.04 LTS.
Comando Linux basename
Il comando basename ti consente di rimuovere i componenti dai nomi di file che non sono richiesti. Di seguito è riportata la sintassi dello strumento:
basename NAME [SUFFIX]
basename OPTION... NAME...
Ed ecco cosa dice la pagina man a riguardo:
basename - strip directory and suffix from filenamesfinale
Print NAME with any leading directory components removed. If specified, also remove a trailing
SUFFIX.
Di seguito sono riportati alcuni esempi in stile Q&A che dovrebbero darti una buona idea su come funziona il comando basename.
Q1. Come funziona il comando basename?
Per impostazione predefinita, se esegui il comando 'basename' con un percorso completo di un file come input, il comando restituisce il nome del file in output. Ad esempio, quando ho eseguito il seguente comando:
basename /home/himanshu/Downloads/analytics.pdf
Ho ottenuto il seguente output:
analytics.pdf
Q2. Basename può gestire più input?
Sì, può. Ma affinché ciò avvenga, è necessario utilizzare l'opzione della riga di comando -a. Ad esempio, quando ho eseguito il seguente comando:
basename -a /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png
Ed ecco l'output che ho ottenuto:
analytics.pdf
test.png
T3. Come creare anche un'estensione del file strip del nome di base?
A volte, potresti voler recuperare solo il nome del file, ma non la sua estensione. Bene, questo può essere fatto usando l'opzione della riga di comando -s (che richiede di passare il suffisso come input).
Ad esempio, il comando seguente:
basename -s .pdf /home/himanshu/Downloads/analytics.pdf
prodotto questo output:
analytics
Q4. Come far terminare ogni uscita di linea con NUL?
Per impostazione predefinita, il carattere di nuova riga viene utilizzato come separatore nell'output. Tuttavia, se lo desideri, puoi forzare basename a utilizzare NUL come separatore. Questo può essere fatto usando l'opzione della riga di comando -z.
Ad esempio:
basename -az /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png
Ed ecco l'output:
analytics.pdftest.png
Quindi non vedi il carattere NUL qui. Per questo, devi reindirizzare l'output su un file, quindi aprire il file in un editor come vim. Ecco cosa ha mostrato vim:
Conclusione
Come puoi vedere, basename non è un comando molto ricco di funzionalità:le opzioni che fornisce sono limitate e la maggior parte di queste è stata discussa qui in questo tutorial. Una volta che hai finito di esercitarti, vai alla pagina man dello strumento per saperne di più.