Linux: Alle Dateien rekursiv nach Erweiterung in ein einzelnes Verzeichnis kopieren

Linux: Alle Dateien rekursiv nach Erweiterung in ein einzelnes Verzeichnis kopieren

Ich versuche, alle *.tifDateien von ./alt nach ./neu zu kopieren. In ./alt habe ich viele Unterverzeichnisse mit unterschiedlichen Dateien und in ./neu brauche ich nur TIF-Dateien, ohne Ordnerbaum.

Also versuchte ich

cp -vR ./old/*.TIF ./new`

Habe aber den Fehler bekommen:

No such file or directory "./old/*.TIF"

Was mache ich falsch?

Antwort1

Verwenden Sie hierfür findfind . -name "*.TIF" -exec cp {} new \;

Wird findverwendet, um Dateien zu finden. Der Befehl sagt „ findDateien beginnend hier ., wobei der Name der Datei -namemit endet. .tifDenken Sie an die Anführungszeichen für die Shell-Erweiterung.“ So tifist es ganz einfach, alle Dateien zu finden.

find . -name "*.tif"
./2/3/3.tif
./2/2.tif
./1.tif

Wir verwenden dann -execetwas mit Dateien zu tun in diesem Fall cpgefundene Dateien {}in das Zielverzeichnis, newgefolgt von einem Escape-Semikolon\;

Antwort2

Es sollte so aussehen. Sie müssen das alte Verzeichnis eingeben:

cd old
cp -R *.tif ../new

Antwort3

.tifMöglicherweise sind in diesem Verzeichnis keine Dateien vorhanden old.

Darüber hinaus können Sie eine Liste der Dateien abrufen und diese mit einem einfachen Skript kopieren:

find /old -type f | xargs grep *.tif wird Ihnen die Liste geben.

Du kannst das:

for i in `find /old -type f | xargs grep *.tif` 
do
cp $i /new
done;

verwandte Informationen