Verschieben Sie nur ein bestimmtes Unterverzeichnis in einen neuen Ordner mit Shell-Skript

Verschieben Sie nur ein bestimmtes Unterverzeichnis in einen neuen Ordner mit Shell-Skript

Ich habe einen Ordner Accountsmit E-Mail-Konten, alle diese Ordner haben einen Ordner Archive.folder. Ich möchte alle Archivordner mit einem einfachen Skript in einen neuen Ordner verschieben.

Ich habe bisher Folgendes versucht:

find . -mindepth 1 -maxdepth 1 ! -name archive -exec mv -t testnew/ {} + 

Aber es verschiebt alle Ordner, nicht nur die mit dem Namen „Archiv“. Ich möchte alle Ordner im aktuellen Ordner mit dem Namen „Archiv“ finden und sie in den Ordner „testnew/“ verschieben. Der Pfad zum verschobenen Ordner sollte derselbe sein wie zuvor.

Ausgangssituation:

Accounts
    - 1
          - archive
          - inbox
          - folder2
    - 2
          - archive
          - inbox
          - folder2

    - 3
          - archive
          - inbox
          - folder2

So sollte es aussehen:

testnew
    - 1
          - archive
    - 2
          - archive
    - 3
          - archive

Antwort1

Wenn es in Ordnung ist, dies interaktiv zu tun, vidirkönnte das ein guter Weg sein. Siehediese Antwort.

In Ihrem Fall sieht die Vorgehensweise folgendermaßen aus:

  1. cd /path/to/Accounts
    find . -type d -name archive | vidir -
    
  2. vidirwird ein Texteditor gestartet. Verwenden Sie "Suchen und Ersetzen" und ersetzen Sie jede führende Zeile ./durch den gewünschten Pfad, sodass die Zeilen Ihrer gewünschten Verzeichnisstruktur entsprechen. Pfade können absolut oder relativ sein und enthalten ../. Sie können dies beispielsweise ganz einfach ändern

    ./1/archive
    ./2/archive
    ./3/archive
    

    das mögen

    ../testnew/1/archive
    ../testnew/2/archive
    ../testnew/3/archive
    
  3. Speichern Sie die bearbeitete Datei und beenden Sie den Editor.

Anmerkungen:

  • Wenn Ihre Verzeichnisstruktur Verzeichnisse enthält, deren Namen mit enden .(sodass ./Teilzeichenfolgen nicht nur am Anfang erscheinen), ist es besser, sie <TAB>./durch zu ersetzen <TAB>whatever/path/you/want/, wobei <TAB>das Tabulatorzeichen angibt. Es hängt vom Editor ab, ob/wie Sie dieses Zeichen in „Suchen und Ersetzen“ einbeziehen können.
  • Wählen Sie Ihren Editor durch Angabe von aus EDITOR, zB find … | EDITOR=kate vidir -.
  • vidirkann keine Dateien zwischen Dateisystemen verschieben. Wenn alle archiveVerzeichnisse zu einem Dateisystem gehören und Sie testnewin einem anderen Dateisystem sein möchten, erstellen Sie testnewim Quelldateisystem, verwenden Sie vidirund verschieben Sie anschließend testnewin das Zieldateisystem.
  • Am Ende vondies ist eine andere AntwortEs gibt einen experimentellen Ansatz, der (missbraucht) wird, EDITORum vidirnicht interaktiv zu machen.Ich finde vidires in Fällen wie Ihrem vor allem deshalb nützlich, weil ich so sicherstellen kann, dass die resultierenden Pfade wirklich meinen Wünschen entsprechen, bevor ich sie umbenenne oder verschiebe. Wenn ich etwas vermassle, kann ich abbrechen, ohne die Änderungen zu speichern.Wenn Sie eine nicht interaktive Lösung für Ihr Problem wünschen, vidirist dies nicht das beste Tool.

verwandte Informationen