Wie kann ich alle Dateien außer einer verschieben? Ich suche so etwas wie:
'mv ~/Linux/Old/!Tux.png ~/Linux/New/'
wo ich alte Sachen in neue Sachen-Ordner außer verschieben Tux.png
. ! -Zeichen steht für eine Negation. Gibt es ein Werkzeug für den Job?
Fügen Sie Folgendes in Ihre .bashrc ein
Es erweitert reguläre Ausdrücke. Sie können dann alle Dateien außer einer um verschieben
Ausnahmen in Bezug auf andere Befehle
Beachten Sie, dass beim Kopieren von Verzeichnissen der Vorwärtsblitz nicht im Namen verwendet werden kann, wie im Thread angegeben. Warum extglob außer brechen außer Bedingung? ::
Das
Backups.backupdb/
ist hier vor der Negation falsch und ich würde es auch nicht zum Verschieben von Verzeichnissen verwenden, da das Risiko besteht, dass Globs mit anderen Befehlen und möglichen anderen Ausnahmen falsch verwendet werden.quelle
mv !(arc*) archive_190629b
Ich würde mit dem traditionellen Find & Xargs-Weg gehen:
-maxdepth 1
macht es nicht rekursiv zu suchen. Wenn Sie sich nur für Dateien interessieren, können Sie sagen-type f
.-mindepth 1
bewirkt, dass der~/Linux/Old
Pfad selbst nicht in das Ergebnis aufgenommen wird. Funktioniert mit allen Dateinamen, auch mit solchen, die eingebettete Zeilenumbrüche enthalten.Ein Kommentar stellt fest, dass die
-t
Option mv wahrscheinlich eine GNU-Erweiterung ist. Für Systeme, die es nicht habenquelle
Eine schnelle Möglichkeit wäre, den Tux-Dateinamen so zu ändern, dass Ihr Verschiebungsbefehl nicht übereinstimmt.
Beispielsweise:
quelle
Ich denke, der einfachste Weg ist mit Backticks
Bearbeiten:
Verwenden Sie stattdessen einen Backslash mit ls, um die Verwendung mit Alias zu verhindern, dh meistens wird ls als ls --color aliasiert.
Danke @Arnold Roa
quelle
grep -v
dort verwenden?Für Bash ist etw Antwort richtig. Hier ist die zsh- Syntax (meine Shell der Wahl):
Erfordert
EXTENDED_GLOB
die Einstellung der Shell-Option.quelle
Ich finde das etwas sicherer und einfacher, wenn man sich auf einfache Verschiebungen verlässt, die bestimmte Dateien oder Verzeichnisse ausschließen.
quelle
-l
Option,ls
viele irrelevante Informationen in die Befehlszeile aufzunehmen und den Befehl mv fehlzuschlagen.Das Folgende ist keine 100% garantierte Methode und sollte überhaupt nicht für die Skripterstellung versucht werden. Manchmal ist es jedoch gut genug für eine schnelle interaktive Shell-Nutzung. Eine Datei Datei Glob wie
(die alle Dateien mit Namen abgleichen, die mit a, b oder c beginnen) kann negiert werden, indem zuerst ein "^" - Zeichen eingefügt wird, d. h
Ich benutze dies manchmal, um nicht mit dem Verzeichnis "lost + found" übereinzustimmen, wie zum Beispiel:
Wenn es andere Dateien gibt, die mit l beginnen, muss ich diese natürlich später verarbeiten.
quelle
Der Befehl find listet alle regulären Dateien auf und der Befehl fgrep filtert alle Tux.png heraus. Die Backticks weisen mv an, die resultierende Dateiliste zu verschieben.
quelle
Wie wäre es, wenn Sie alles in den Ordner verschieben und dann einfach Tux.png zurück verschieben?
Ich kann mir keine Shell-Syntax vorstellen, die "alles außer ..." ohne weiteres sagt.
quelle
quelle
ls ~/Linux/Old/ | grep -v Tux.png | xargs -I{} mv {} ~/Linux/New/
funktioniert stattdessen.Wie wäre es mit:
Sie müssen sich jedoch im Ordner befinden.
quelle
Man kann grep so überspringen :
quelle
Dies könnte einfacher und leichter zu merken sein und es funktioniert für mich.
mv $(ls ~/folder | grep -v ~/folder/exclude.png) ~/destination
quelle