GNU/Linux >> Linux Esercitazione >  >> Linux

Come escludere un'estensione di file specifica durante la copia ricorsiva di file

Come forse già saprai, 'cp' è il programma da riga di comando in Linux per copiare file e directory. L'uso semplice e più comune di 'cp' è il seguente:

$ cp file1 file2 file3... fileN target_folder/

Nota che il comando sopra funziona sia per i file che per 'vuoto' cartelle. Non funziona per le cartelle che hanno del contenuto, sia file che sottocartelle.

Per copiare tali cartelle, possiamo specificare il '-r' flag (ricorsivo).

$ cp -r folder1/ folder2/ file1 file2 target_folder/

La copia ricorsiva implica che l'intera struttura delle cartelle sotto una cartella, ovvero le sottocartelle e i file in esse contenuti, le sottocartelle all'interno delle sottocartelle e i file in esse contenuti, e così via, venga copiata.

Questo copia tutti i file e non c'è modo all'interno del 'cp' comando per escludere alcuni file in base a determinati parametri. Ad esempio, gli utenti potrebbero voler copiare tutti i file in modo ricorsivo, ad eccezione dei file MP3 (audio) nelle sottocartelle fino in fondo nella gerarchia.

Trova tutti i file tranne alcune estensioni di file

Per ottenere ciò, utilizziamo il comando find, che è uno strumento di comando utilizzato semplicemente per cercare file e cartelle in Linux in base ai parametri del file o della cartella:nome file, estensione, dimensione, ecc.

Allo stesso modo, ci sono modi per cercare i file specificando quali file devono essere esclusi nel comando trova . La sintassi per individuare i file di un'estensione specifica utilizzando trova è:

$ find <folder_to_search> -name '*.<extension>'

Ad esempio, per individuare ricorsivamente tutti i file MP3 nella cartella corrente:

$ find . -name "*.mp3"

Ora, per trovare tutti i file nelle cartelle e nelle sottocartelle, ad eccezione dei file MP3, usa il 'negazione' operatore di trova :

$ find . ! -name "*.mp3"

Possiamo vedere che ora viene visualizzato tutto tranne i file MP3. Tuttavia, vogliamo solo visualizzare i file, perché questo output verrà successivamente inserito in 'cp' . Al momento, vengono visualizzati sia i file che le cartelle (ad es. 'temp1/' ), che porterà a copie ripetitive degli stessi file.

Per rimuovere le cartelle dall'output, usa semplicemente l'argomento '-type f' . Qui 'f' sta per un file.

$ find . ! -name '*.mp3' -type f

Abbiamo quindi ora solo i file ottenuti in modo ricorsivo all'interno della cartella 'test' . Ora possiamo procedere a reindirizzare questo output al comando 'cp' .

Escludi estensione file specifica durante la copia ricorsiva di file

Per fare ciò, utilizziamo 'xargs' comando per creare 'cp' considera l'output di 'trova' come suoi argomenti. Inoltre, utilizziamo il '-t' flag per specificare la directory di destinazione, senza la quale il programma considera l'output di 'find' come directory di destinazione.

$ find <folder_to_search> ! -name '*.<extension>' -type f | xargs cp -t <target_directory>

Comando effettivo.

$ find . ! -name '*.mp3' -type f | xargs cp -t Misc/

Pertanto, tutti i file trovati ricorsivamente, tranne il “.mp3” i file sono stati copiati nella cartella "Varie" .

Conclusione

In questo articolo, abbiamo imparato come copiare i file in modo ricorsivo in Linux escludendo i file di una certa estensione. Inoltre, dai un'occhiata a come copiare ricorsivamente file di un'estensione specifica.

Se hai domande o feedback, faccelo sapere nei commenti qui sotto.


Linux
  1. Come utilizzare Inotifywait per guardare una directory per la creazione di file di un'estensione specifica?

  2. Come cercare i file per dimensione ed estensione?

  3. Come copiare ricorsivamente i file per estensione del file??

  4. Come nascondere i file con un'estensione specifica?

  5. Come copiare le directory in modo ricorsivo utilizzando rsync escludendo file specifici

Come rimuovere file con estensione specifica in Linux

Come escludere una directory durante la ricerca di file in Linux

Come copiare file con estensione di file specifica in modo ricorsivo

Come trovare file basati su timestamp in Linux

Come trovare file contenenti una stringa di testo specifica in Linux

Come trovare i file modificati nelle ultime 24 ore in Linux