Ich habe ein Verzeichnis, das viele Ordner enthältdas haben wieder Unterordner und dann gibt es einige Dateien. Kann ich ein Bash-Skript schreiben, das alle Dateien aus dem angegebenen Verzeichnis in einen einzigen Ordner kopiert? Damit muss ich nicht durch immer einen einzigen Ordner navigieren und den Inhalt in einen anderen Ordner kopieren.
Antworten:
1 für die Antwort № 1Im obersten Verzeichnis, unter dem die Dateien kopiert werden sollen:
find . -type f -exec cp {} /some/new/location ;
Findet alle normalen Dateien und kopiert sie dann in /some/new/location
0 für die Antwort № 2
Sie können mit find alle Dateien im Ordner auflisten:
find ./source -type f
und dann die Ausgabe als Argument für cp verwenden, würde es so aussehen:
cp $(find ./source -type f) destination
Es würde ein Problem geben, wenn sich einige Dateien in der ursprünglichen Verzeichnisstruktur mit einem Namen mit einem Konflikt befinden. In diesem Fall würde cp sich weigern, weitere Dateien mit dem gleichen Namen mit folgendem Fehler zu kopieren:
cp: überschreibt nicht gerade erstellte
destination/t22" with
./source/test/t2/t22 "
Um Kopien von Dateien mit demselben Namen zu erstellen, können Sie die Backup-Option wie folgt verwenden:
cp --backup=numbered $(find ./source -type f) destination
Wenn Sie sehen möchten, was passiert, verwenden Sie die Option -v (ausführlich)
cp -v --backup=numbered $(find ./source -type f) destination