Ich möchte den Inhalt dieser Ordner mit einer Befehlszeile zusammenführen.
.
├── folder1
│ │ file.txt
│
├── folder2
│ │ file.txt
│
└───folder3
│ file.txt
Wie kann ich das machen ?
Antwort1
Endlich kann ich dies mit cp
und es ist--backup
Flagge.
cp --backup=numbered */*.txt new_directory/
Antwort2
Die folgende Befehlszeilenschleife kopiert den (obersten) Inhalt jedes Ordners mit dem Namen „folder*“ in Ihrem aktuellen Verzeichnis in ein Verzeichnis mit dem Namen „new_directory“. Der /*
Glob stimmt standardmäßig nicht mit „dot files“ überein; verwenden Sie, shopt -s dotglob
wenn Sie dieses Verhalten ändern möchten. Wenn der gleiche (Basis-)Dateiname bereits in new_directory vorhanden ist, wird der Zieldatei der ursprüngliche Ordner (und ein Unterstrich) vorangestellt, um sie eindeutig zu machen.
Alles in einer Zeile:
for f in folder*/*; do [ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }; [ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"; done
Zur besseren Lesbarkeit aufgeschlüsselt:
for f in folder*/*
do
[ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }
[ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"
done
Wenn Sie stattdessen beabsichtigen,bewegenUm die Dateien von ihren ursprünglichen Speicherorten zu entfernen, ändern Sie einfach die cp
's in mv
's.