So verschieben Sie alle Dateien in einen Unterordner

So verschieben Sie alle Dateien in einen Unterordner

Ich muss Dateien aus einem Ordner in einen Unterordner verschieben. Da dies ein Vorgang ist, der mehr als einmal ausgeführt werden kann, ist der Unterordner möglicherweise nicht leer.

Nehmen wir an, die Struktur ist wie folgt:

renatospaka@dell-w10home:~/devlpm$ ls -la
total 24
drwxr-xr-x  4 renatospaka renatospaka 4096 Sep  8 12:36 .
drwxr-xr-x 10 renatospaka renatospaka 4096 Sep  8 12:34 ..
drwxr-xr-x  2 renatospaka renatospaka 4096 Sep  8 12:36 api
-rw-r--r--  1 renatospaka renatospaka   10 Sep  8 12:36 file1.txt
-rw-r--r--  1 renatospaka renatospaka   10 Sep  8 12:36 file2.txt
drwxr-xr-x  2 renatospaka renatospaka 4096 Sep  8 12:34 new

Es gibt dieses ausgezeichneteFrageaus dem ich den folgenden Befehl extrahiert habe: ls | grep -v new | xargs mv -t new. Es funktioniert wirklich und verschiebt den Inhalt in dieneuOrdner. Ab der zweiten Ausführung tritt jedoch ein Fehler auf, da der Zielordner nicht leer ist und der Vorgang abgebrochen wird.

Wie kann ich dieses Problem beheben? Ich habe einige Flaggenkombinationen ausprobiert, xargsaber alle sind fehlgeschlagen ...

Antwort1

mvbeschwert sich, weil es keine Argumente von erhält xargs. Fügen Sie Folgendes hinzu -r, um xargsdie Ausführung zu verhindern, wenn die Eingabe leer ist:

   -r, --no-run-if-empty
          If the standard input does not contain any nonblanks, do not run the command.  Normally, the command is run once even if there is  no  in‐
          put.  This option is a GNU extension.

Sie können außerdem mvdas Verhalten steuern, wenn ein Ziel vorhanden ist:

Sehen man mv:

   -f, --force
          do not prompt before overwriting

   -i, --interactive
          prompt before overwrite

   -n, --no-clobber
          do not overwrite an existing file

Also:

... |  xargs -r mv -f -t new

Ihr Befehl hat jedoch ernsthafte Probleme, wenn Ihre Dateien Zeilenumbrüche oder sogar Leerzeichen enthalten. Im AllgemeinenAnalysieren Sie nicht die Ausgabe vonls.

verwandte Informationen