![디렉터리의 모든 파일을 동일한 디렉터리의 새 하위 디렉터리로 이동](https://rvso.com/image/1497104/%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%9D%98%20%EC%83%88%20%ED%95%98%EC%9C%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A1%9C%20%EC%9D%B4%EB%8F%99.png)
디렉토리의 모든 파일을 동일한 디렉토리의 새 하위 디렉토리로 이동하는 방법을 알려주십시오.
이와 같이:
/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.(*)
답변1
BaseFolder -minlength 1 -type f 찾기 | 경로를 읽는 동안; 하다 \ dest="$(dirname "$path")/새 폴더"; mkdir "$dest"; mv "$path" "$dest"; 완료
답변2
새로운 답변
명령줄에서 다음과 같이 할 수 있습니다.
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
답변3
슬래시를 사용하면 유닉스 파생물을 가정하겠습니다.
cd /volume1/
for I in TEST*; do mkdir $I/_NEW_FOLDER; mv $I/* $I/_NEW_FOLDER; done
를 그 자체로 옮기려고 하면 오류가 발생 _NEW_FOLDER
하지만 여전히 작동합니다.