Verschieben Sie alle Dateien im Verzeichnis in ein neues Unterverzeichnis im selben Verzeichnis.

Verschieben Sie alle Dateien im Verzeichnis in ein neues Unterverzeichnis im selben Verzeichnis.

Wie verschiebe ich bitte alle Dateien im Verzeichnis in ein neues Unterverzeichnis im selben Verzeichnis?

So was:

/volume1/TEST/file1.jpg to /Volume1/TEST/_NEW_FOLDER/file.jpg
/volume1/TEST2/file2.bmp to /Volume1/TEST2/_NEW_FOLDER/file2.bmp
/volume1/TEST3/file3.dwg to /Volume1/TEST3/_NEW_FOLDER/file3.dwg
/volume1/TEST4/file4.(*) to /Volume1/TEST4/_NEW_FOLDER/file4.(*)

Antwort1

finde BaseFolder -mindepth 1 -type f | while read path; mache \
dest="$(dirname "$path")/NeuerOrdner"; mkdir "$dest"; mv "$path" "$dest"; fertig

Antwort2

Neue Antwort

Von der Befehlszeile aus können Sie dies folgendermaßen tun:

for dir in /volume1/TEST* ; do cd "$dir" ; mkdir _NEW_FOLDER ; mv *.* _NEW_FOLDER ; done

Oder schreiben Sie ein Skript wie dieses

#!/bin/bash
NFLDR=_NEW_FOLDER
for dir in /volume1/TEST*; do (
# for logging to syslog in a cron job, uncomment the following line
# logger moving contents of $dir to $dir/$NEWFLDR
        cd "$dir" && mkdir $NFLDR && mv *.* $NFLDR
); done
# logger moving to subfolders finished

Dann

chmod +x mvtosubfolders.sh
./mvtosubfolders.sh

Bearbeiten: Wenn Sie dies über verwenden möchten cron, speichern Sie das Skript als eg /usr/local/bin/mvtosubfolders.shund machen Sie es ausführbar. Passen Sie Ihre Crontab so an, dass es /usr/local/bin/mvtosubfolders.shregelmäßig aufgerufen wird. Z. B.

# m h  dom mon dow   command
  0 5   *   *   1    /usr/local/bin/mvtosubfolders.sh

Beispielausgabe für die Kommandozeile:

root@router ~/testfolder # tree
.
├── TEST1
│   └── file1.jpg
├── TEST2
│   └── file2.bmp
├── TEST3
│   └── file3.dwg
└── TEST4
    ├── file4.avi
    ├── file4.cr2
    ├── file4.mov
    └── file4.tif

4 directories, 7 files
root@router ~/testfolder # for dir in /root/testfolder/TEST* ; do cd "$dir" ; mkdir _NEW_FOLDER ; mv *.* _NEW_FOLDER ; done
root@router ~/testfolder/TEST4 # cd ..
root@router ~/testfolder # tree
.
├── TEST1
│   └── _NEW_FOLDER
│       └── file1.jpg
├── TEST2
│   └── _NEW_FOLDER
│       └── file2.bmp
├── TEST3
│   └── _NEW_FOLDER
│       └── file3.dwg
└── TEST4
    └── _NEW_FOLDER
        ├── file4.avi
        ├── file4.cr2
        ├── file4.mov
        └── file4.tif

8 directories, 7 files
root@router ~/testfolder #

Alte, falsche Antwort

Unterordner nicht berücksichtigen

Angenommen, Ihre Dateien haben diesen Punkt zwischen Dateinamen und Erweiterung, genau wie in Ihrem obigen Beispiel:mv *.* _NEW_FOLDER

root@router ~/testfolder # touch file{1,2,3,4,5}.jgp
root@router ~/testfolder # mkdir subfolder
root@router ~/testfolder # ls -al
total 12
drwxr-xr-x  3 root root 4096 Jun 18 09:58 .
drwx------ 24 root root 4096 Jun 18 09:58 ..
-rw-r--r--  1 root root    0 Jun 18 09:58 file1.jgp
-rw-r--r--  1 root root    0 Jun 18 09:58 file2.jgp
-rw-r--r--  1 root root    0 Jun 18 09:58 file3.jgp
-rw-r--r--  1 root root    0 Jun 18 09:58 file4.jgp
-rw-r--r--  1 root root    0 Jun 18 09:58 file5.jgp
drwxr-xr-x  2 root root 4096 Jun 18 09:58 subfolder
root@router ~/testfolder # mv *.* subfolder
root@router ~/testfolder # ls -al
total 12
drwxr-xr-x  3 root root 4096 Jun 18 09:59 .
drwx------ 24 root root 4096 Jun 18 09:59 ..
drwxr-xr-x  2 root root 4096 Jun 18 09:59 subfolder
root@router ~/testfolder # ls -al subfolder
total 8
drwxr-xr-x 2 root root 4096 Jun 18 09:59 .
drwxr-xr-x 3 root root 4096 Jun 18 09:59 ..
-rw-r--r-- 1 root root    0 Jun 18 09:58 file1.jgp
-rw-r--r-- 1 root root    0 Jun 18 09:58 file2.jgp
-rw-r--r-- 1 root root    0 Jun 18 09:58 file3.jgp
-rw-r--r-- 1 root root    0 Jun 18 09:58 file4.jgp
-rw-r--r-- 1 root root    0 Jun 18 09:58 file5.jgp

Antwort3

Da Sie Schrägstriche verwenden, gehe ich von einem Unix-Derivat aus:

cd /volume1/
for I in TEST*; do mkdir $I/_NEW_FOLDER; mv $I/* $I/_NEW_FOLDER; done

Beachten Sie, dass beim Versuch, _NEW_FOLDERin sich selbst zu verschieben, ein Fehler auftritt. Es funktioniert jedoch trotzdem.

verwandte Informationen