Verschieben Sie alle Dateien in einem Verzeichnis in einem Unterverzeichnis


2

Für dieses einfache Problem kann ich keine schnelle Lösung finden: Ich habe diesen Baum:

fatherDir
   -File1.txt
   -SomeFile.txt
    ...
   - A name.txt
   -sonDir

Ich möchte alle Dateien in fatherDir in fatherDir / SonDir verschieben.

mv * sonDir

Da sonDir in fatherDir ist, erhalte ich eine Fehlermeldung.

Wie kann man das erreichen?

Antworten:


2

Um alle Dateien zu finden, fatherDiranstatt sie zu verwenden *(was Ihnen auch die sonDirMöglichkeit gibt)

find fatherDir -type f -maxdepth 1 -exec mv {} fatherDir/sonDir \+

Das {}wird durch jeden gefundenen Dateinamen ersetzt, und alle werden in das Zielverzeichnis verschoben.


1

Ein Ansatz könnte sein, grep in Kombination mit xargs zu verwenden:

ls -A | egrep -v sonDir | xargs -i mv {} sonDir
  • Listen Sie zuerst alle Dateien und Ordner im aktuellen Verzeichnis (zB fatherDir) mit auf ls
  • Stellen Sie sicher, dass Sie auch versteckte Dateien mit dem -AFlag auslesen
  • egrep -v Mit dieser Option können Sie sonDir von der Druckausgabe ausschließen
  • Erstellen Sie eine Befehlszeile aus der Standardeingabe mit xargsund ersetzen Sie diese {}durch den Dateinamen. Option -iist hier erforderlich!

Das ist es! Ich benutze diesen Ansatz ziemlich häufig, da Sie damit nicht nur einen Ordner, sondern auch verschiedene Ordner und Dateien gleichzeitig ausschließen können. Falls Sie zB ausschließen möchten sonDir daughterDirund nephew.filedies durch einfaches Angeben tun können egrep -v '(sonDir|daughterDir|nephew.file)', bleibt der Rest des oben gezeigten Befehls derselbe ... und es gibt viele Variationen!


-1

Ist das wichtig? Der Umzug passiert immer noch. Was Sie bekommen, ist eher eine Warnung. Sie können das stderr nach / dev / null umleiten. Wenn es Sie immer noch stört, verwenden Sie find, wie von slhck erklärt, oder so ähnlich:

mv `ls * | grep -v sonDir` sonDir

Dies schlägt fehl, wenn eine Datei ein Leerzeichen im Namen enthält, z. B. mit "A name.txt" wie im obigen Beispiel.
Slhck
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.