wie 'find' das aktuelle Verzeichnis nicht zurückgeben soll

11

Ich versuche gerade, findalle Dateien und Ordnerstrukturen, die einem bestimmten Muster entsprechen, in ein bestimmtes Verzeichnis zu kopieren (und zu kopieren), und ich bin so fast da!

Insbesondere möchte ich rekursiv alle Ordner, die nicht mit einem '_' beginnen, aus einem angegebenen Pfad kopieren.

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

In / source / path / with / directory / path befinden sich maschinenspezifische Verzeichnisse, die mit '_' und anderen beginnen, und ich bin nur daran interessiert, die anderen zu kopieren. Aus einem anderen Grund gibt der Befehl find das Verzeichnis / source / path / with / directory / zurück und kopiert daher dessen Inhalt, einschließlich Verzeichnisse, die mit '_' beginnen.

Hat jemand einen Hinweis, warum das so ist?

Vielen Dank,

Pascal

Pinpin
quelle
für die Nachwelt: stackoverflow.com/questions/13525004/…
Trevor Boyd Smith

Antworten:

14

findGibt den Stammpfad zurück, da er Ihren Kriterien entspricht, dh es handelt sich um ein Verzeichnis, das nicht mit beginnt _.

Sie suchen -mindepth 1, ich vermute:

$ 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

Referenz: Manpage finden

Zickzack
quelle
Ausgezeichnet! funktioniert wie ich wollte. Ich habe es durch Hinzufügen funktionieren lassen! -name 'Dateien', aber es fühlte sich für mich falsch an ...
Pinpin
0

Wechsel von:

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

zu:

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

Dieser Weg /source/path/with/directorieswird nicht berücksichtigt.

Das shopt -s dotglobist so, dass *auch Dateien und Verzeichnisse übereinstimmen, die mit einem beginnen .(versteckte Dateien, Verzeichnisse).

Und das Ganze wird in eine Sub-Shell eingewickelt (...), um die Wirkung shoptnur innerhalb der Sub-Shell zu begrenzen , sonst müssten Sie es später mit rückgängig machen shopt -u dotglob.

Janos
quelle
Dies schlägt bei Verzeichniseinträgen fehl, die mit beginnen .. Versuchen Sie es auch nicht .*, sonst passen Sie zu einer ganzen Reihe anderer Dinge, die Sie nie beabsichtigt haben. ;-)
Zigg
Guter Punkt, aktualisierte die Antwort, fügte hinzu mit shopt.
Janos