GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo di find e tar con file con caratteri speciali nel nome

Usa lo -T caratteristica di tar per dirgli di leggere l'elenco dei file da un altro file (tar tratta ogni riga come un file separato).

Puoi quindi utilizzare <() notazione per fare in modo che la tua shell generi uno pseudo-file dall'output di un comando:

tar cf ctlfiles.tar -T <(find /home/db -name "*.ctl")

Se la tua shell non supporta <() notazione, puoi usare un file temporaneo:

find /home/db -name "*.ctl" > ctlfile-list
tar cf ctlfiles.tar -T ctlfile-list
rm ctlfile-list

Puoi usare la funzionalità -print0 di find con la funzionalità -0 di xargs, in questo modo:

find /home/db -name '*.ctl' -print0 | xargs -0 tar -cf ctlfiles.tar

-print0 (che è il trattino-print-zero) dice a find di usare un null come delimitatore tra i percorsi invece degli spazi, e -0 (che è il trattino zero) dice a xargs di aspettarsi lo stesso.

Modificato per aggiungere:

Se hai un gran numero di file, xargs può invocare tar più di una volta. Consulta i commenti per sapere come gestirlo o fai in modo che find invoke tar direttamente, come questo, che funziona con qualsiasi numero di file, anche se hanno spazi o caratteri di nuova riga nei loro nomi:

rm -f ctlfiles.tar
find /home/db -name '*.ctl' -exec tar -rf ctlfiles.tar {} +

Quando l'ar " sono separate da null.

Quindi quanto segue funziona con un numero arbitrario di file, possibilmente contenenti caratteri di nuova riga:

find /home/db -name '*.ctl' -print0 | tar --null -T - -cf ctlfiles.tar

Linux
  1. Come comprimere ed estrarre file usando il comando tar su Linux?

  2. trova e rimuovi i file con spazio usando il comando trova su Linux

  3. Trova tutti i file con nome contenente una stringa

  4. Trova file con caratteri di Windows illegali nel nome su Linux

  5. Rimozione di file con rm utilizzando find e xargs

Come trovare file in Linux con il comando Trova

Come trovare i file usando la riga di comando nel terminale Linux

Come trovare file con il comando fd in Linux

Usare il comando tr in Linux per giocare con i personaggi

Trovare file eseguibili usando ls e grep

Come rinominare tutti i file con caratteri speciali e spazi in una directory?