come avere 'find' non restituire la directory corrente


11

Attualmente sto cercando di find(e copiare) tutti i file e la struttura di cartelle corrispondenti a un modello specifico, in una directory specificata e ci sono quasi!

In particolare, desidero copiare in modo ricorsivo tutte le cartelle che non iniziano con un carattere '_' da un percorso specificato.

find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;

In / source / path / with / directories / path ci sono directory specifiche della macchina che iniziano con '_' e altre, e sono interessato solo a copiare le altre. Per una ragione al di là di me, il comando find restituisce la directory / source / path / with / directories / e quindi copia il suo contenuto, incluse le directory che iniziano con '_'.

Qualcuno ha un suggerimento sul perché questo è?

Grazie,

Pascal


Risposte:


14

findrestituisce il percorso di root perché corrisponde ai tuoi criteri, ovvero è una directory e non inizia con _.

Stai cercando -mindepth 1, sospetto:

$ cd /tmp
$ mkdir a
$ touch a/b
$ mkdir a/c
$ touch a/c/d
$ find a
a
a/b
a/c
a/c/d
$ find a -mindepth 1
a/b
a/c
a/c/d

Riferimento: trova la manpage


Eccellente! funziona come volevo. L'ho fatto funzionare aggiungendo! -name "files" ma mi è sembrato sbagliato ...
Pinpin,

0

Cambio da:

find /source/path/with/directories ...

per:

(shopt -s dotglob; find /source/path/with/directories/* ... )

In questo modo /source/path/with/directoriesnon sarà incluso.

Il shopt -s dotglobè così che *sarà anche corrispondere i file e le directory che iniziano con un .(file nascosti, directory).

E il tutto è racchiuso in una sotto-shell (...)per limitare l'effetto shoptsolo all'interno della sotto-shell, altrimenti dovresti annullarla in seguito shopt -u dotglob.


Ciò non riuscirà per le voci di directory che iniziano con .. Non provare .*neanche, o abbinerai un sacco di altre cose che non hai mai pensato di fare. ;-)
zigg

Buon punto, aggiornata la risposta, aggiunta usando shopt.
Janos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.