Unter Unix möchte ich alle Dateien mit einer bestimmten Erweiterung (alle Excel-Dateien) aus allen Unterverzeichnissen in ein anderes Verzeichnis kopieren. Ich habe den folgenden Befehl:
cp --parents `find -name \*.xls*` /target_directory/
Die Probleme mit diesem Befehl sind:
Es kopiert auch die Verzeichnisstruktur und ich möchte nur die Dateien (daher sollten alle Dateien in / target_directory / landen).
Es werden keine Dateien mit Leerzeichen in den Dateinamen kopiert (die ziemlich viele sind).
Irgendwelche Lösungen für diese Probleme?
find... exec mv
?Antworten:
--parents
kopiert die Verzeichnisstruktur, also sollten Sie das loswerden.Die Art und Weise, wie Sie dies geschrieben haben, wird
find
ausgeführt und die Ausgabe wird in die Befehlszeile eingefügt, sodasscp
nicht zwischen den Leerzeichen zwischen den Dateinamen und den Leerzeichen innerhalb des Dateinamens unterschieden werden kann. Es ist besser so etwas zu tunin dem
cp
für jeden gefundenen Dateinamen ausgeführtfind
und der Dateiname korrekt übergeben wird. Hier finden Sie weitere Informationen zu dieser Technik.Anstelle all der oben genannten können Sie zsh verwenden und einfach eingeben
zsh
kann Platzhalter um Unterverzeichnisse erweitern und macht solche Dinge sehr einfach.quelle
Bash
4.0+ undksh93
unterstützt auch**
. Verwendenshopt -s globstar
Sie für Bash, um es zu aktivieren. Für ksh ist esset -G
oderset -o globstar
.find . -name '*.xls' -print0 | xargs -0 cp -t destdir
Aus all dem habe ich mir diese Version ausgedacht. Diese Version funktioniert auch für mich im Mac Recovery Terminal.
Es wird im aktuellen Verzeichnis und rekursiv in allen Unterverzeichnissen nach Dateien mit der Erweiterung xsl gesucht. Sie werden alle in das Zielverzeichnis kopiert.
CP-Flags sind:
quelle
Ich hatte ein ähnliches Problem. Ich habe es gelöst mit:
Das
'{}'
und";"
führt die Kopie für jede Datei aus.quelle
Ich musste das auch selbst machen. Ich habe es über das Argument --parents für cp gemacht:
quelle
Sie können die --parents entfernen, es besteht jedoch die Gefahr einer Kollision, wenn mehrere Dateien denselben Namen tragen.
quelle