1

Пожалуйста, как переместить все файлы в каталоге в новый подкаталог в том же каталоге?

Как это:

/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.(*)

3 ответа3

2
find BaseFolder -mindepth 1 -type f | while read path; do \
dest="$(dirname "$path")/NewFolder"; mkdir "$dest"; mv "$path" "$dest"; done
1

Новый ответ

Из командной строки вы можете сделать это так:

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

Или напишите такой сценарий

#!/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

затем

chmod +x mvtosubfolders.sh
./mvtosubfolders.sh

Редактировать: если вы хотите использовать это через cron , сохраните скрипт как, например, /usr/local/bin/mvtosubfolders.sh и сделайте исполняемым. Настройте ваш crontab так, чтобы он регулярно /usr/local/bin/mvtosubfolders.sh . Например

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

Пример вывода для командной строки:

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 #

Старый, неправильный ответ

Не принимая во внимание подпапки

Предполагая, что ваши файлы имеют эту точку между именем файла и расширением, как в вашем примере выше: 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
0

Поскольку вы используете прямую косую черту, я буду предполагать производную от Unix:

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

Обратите внимание, что при попытке переместить _NEW_FOLDER внутрь себя произойдет ошибка, но она все равно будет работать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .