comment avoir 'find' ne retourne pas le répertoire courant

11

J'essaie actuellement find(et de copier) tous les fichiers et la structure de dossiers correspondant à un modèle spécifique, dans un répertoire spécifié et j'y suis presque!

Plus précisément, je veux copier récursivement tous les dossiers ne commençant pas par un caractère «_» à partir d'un chemin spécifié.

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

Dans / source / chemin / avec / répertoires / chemin sont des répertoires spécifiques à la machine commençant par '_' et d'autres, et je ne souhaite que copier les autres. Pour une raison qui me dépasse, la commande find renvoie le répertoire / source / path / avec / répertoires /, et copie donc son contenu, répertoires commençant par '_' inclus.

Quelqu'un a une idée de pourquoi?

Merci,

Pascal

Pinpin
la source
pour la postérité: stackoverflow.com/questions/13525004/…
Trevor Boyd Smith

Réponses:

14

findrenvoie le chemin racine car il correspond à vos critères, c'est-à-dire qu'il s'agit d'un répertoire et qu'il ne commence pas par _.

Vous cherchez -mindepth 1, je soupçonne:

$ 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

Référence: trouver la page de manuel

zigg
la source
Excellent! fonctionne comme je le voulais. Je l'ai fait travailler en ajoutant! -nommez 'fichiers' mais ça me semblait mal ...
Pinpin
0

Changer de:

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

à:

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

Cette façon /source/path/with/directoriesne sera pas incluse.

Le shopt -s dotglobest ainsi que *correspondront également les fichiers et répertoires commençant par un .(fichiers cachés, les répertoires).

Et le tout est enveloppé dans un sous-shell avec (...)pour limiter l'effet de shoptseulement dans le sous-shell, sinon vous devrez le défaire plus tard avec shopt -u dotglob.

janos
la source
Cela échouera pour les entrées de répertoire commençant par .. N'essayez pas non .*plus, ou vous allez correspondre à beaucoup d'autres choses que vous n'avez jamais eu l'intention de faire. ;-)
zigg
Bon point, mis à jour la réponse, ajouté en utilisant shopt.
janos