Da find eine Option zum Ausschließen hat, verwenden Sie find + xargs + mv:
find /source/directory -name ignore-directory-name -prune -print0 | xargs -0 mv --target-directory=/target/directory
Beachten Sie, dass dies fast von der Find-Manpage kopiert wurde (ich denke, die Verwendung von mv --target-directory ist besser als cpio).
Nehmen wir an, die dir-Struktur ist wie,
|parent
|--child1
|--child2
|--grandChild1
|--grandChild2
|--grandChild3
|--grandChild4
|--grandChild5
|--grandChild6
Und wir müssen Dateien verschieben, damit es aussieht wie:
|parent
|--child1
| |--grandChild1
| |--grandChild2
| |--grandChild3
| |--grandChild4
| |--grandChild5
| |--grandChild6
|--child2
In diesem Fall müssen Sie zwei Verzeichnisse child1
ausschließen und child2
, und verschieben Sie die restlichen Verzeichnisse nach child1
Verzeichnis.
verwenden,
mv !(child1|child2) child1
Dadurch werden alle restlichen Verzeichnisse nach child1
verschoben Verzeichnis.
Dies ist nicht genau das, wonach Sie gefragt haben, aber es könnte die Aufgabe erfüllen:
mv the-folder-you-want-to-exclude somewhere-outside-of-the-main-tree
mv the-tree where-you-want-it
mv the-excluded-folder original-location
(Verschieben Sie im Wesentlichen den ausgeschlossenen Ordner aus dem größeren zu verschiebenden Baum.)
Also, wenn ich a/
habe und ich möchte a/b/c/*
ausschließen :
mv a/b/c ../c
mv a final_destination
mkdir -p a/b
mv ../c a/b/c
Oder sowas ähnliches. Andernfalls erhalten Sie möglicherweise find
um Ihnen zu helfen.
Holen Sie sich zuerst die Namen von Dateien und Ordnern und schließen Sie aus, was Sie wollen:
ls --ignore=file1 --ignore==folder1 --ignore==regular-expression1 ...
Übergeben Sie dann die gefilterten Namen an mv
als erster Parameter und der zweite Parameter ist das Ziel:
mv $(ls --ignore=file1 --ignore==folder1 --ignore==regular-expression1 ...) destination/