![Verschieben Sie alle Dateien im Verzeichnis in ein neues Unterverzeichnis im selben Verzeichnis.](https://rvso.com/image/1497104/Verschieben%20Sie%20alle%20Dateien%20im%20Verzeichnis%20in%20ein%20neues%20Unterverzeichnis%20im%20selben%20Verzeichnis..png)
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.sh
und machen Sie es ausführbar. Passen Sie Ihre Crontab so an, dass es /usr/local/bin/mvtosubfolders.sh
regelmäß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_FOLDER
in sich selbst zu verschieben, ein Fehler auftritt. Es funktioniert jedoch trotzdem.