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.