bash ls - Rimozione di parte di un nome file per più file su Linux




comandi unix (6)

Voglio rimuovere test.extra da tutti i miei nomi di file nella directory corrente

for filename in *.fasta;do 

    echo $filename | sed \e 's/test.extra//g'

done

ma si lamenta di non aver trovato file.echo per essere sicuro che sia elencato correttamente.


Answers

$ mmv '*test.extra*.fasta' '#1#2.fasta'

Questo è sicuro nel senso che mmv non farà nulla se altrimenti sovrascriverebbe i file esistenti (ci sono opzioni da riga di comando per disattivarlo).


Per prima cosa, hai \e invece di -e .


Prova a rename "extra.test" "" *

$ find
./extra.test-eggs.txt
./extra.testbar
./fooextra.test
./ham-extra.test-blah

$ rename "extra.test" "" *
$ find
./-eggs.txt
./bar
./foo
./ham--blah

Prima di tutto usa 'sed -e' invece di '\ e'

E ti suggerirei di farlo in questo modo in bash

for filename in *.fasta; do 
    [ -f "$filename" ] || continue
    mv "$filename" "${filename//test.extra/}"

done

So che questo battistrada è vecchio, ma il seguente oneliner, ispirato alla risposta convalidata, mi ha aiutato molto;)

for filename in ./*; do mv "./$filename" "./$(echo "$filename" | sed -e 's/test.extra//g')";  done

Puoi usare cpio (1) per creare file tar. cpio prende i file da archiviare su stdin, quindi se hai già capito il comando find che vuoi usare per selezionare i file dell'archivio, inseriscilo in cpio per creare il file tar:

find ... | cpio -o -H ustar | gzip -c > archive.tar.gz




linux bash shell