/*
* http://sosal.kr/
* made by so_Sal
*/
다음과 같이 수많은 디렉토리들이 존재한다.
디렉토리 목록만 출력하는 명령어는 매우 간단하다.
[sosal@sosal tmpFiles]$ ls -ld */
drwxrwxrwx+ 2 sosal sosal 4096 Dec 17 13:17 0d191d48-caea-47ff-b2a6-aa25db419b48/
drwxrwxrwx+ 2 sosal sosal 4096 Dec 17 13:36 0d894622-7acf-4777-8834-c86f65f093f3/
drwxrwxrwx+ 2 sosal sosal 4096 Dec 17 12:43 0fa20077-608b-4ee5-b00c-343992ecd1d0/
drwxrwxrwx+ 2 sosal sosal 4096 Dec 17 09:48 1982a22a-5bea-4475-beef-71674d3f17e0/
drwxrwxrwx+ 2 sosal sosal 4096 Dec 17 06:52 19f76f26-ce70-42fb-8b6a-ee254e45c3bd/
drwxrwxrwx+ 2 sosal sosal 4096 Dec 17 12:02 1b9f522d-8a2b-4d92-86cf-9814a3710d58/
drwxrwxrwx+ 2 sosal sosal 4096 Dec 17 07:23 1c6295c4-b9cf-4387-b402-4ab787f8db5a/
drwxrwxrwx+ 2 sosal sosal 4096 Dec 17 12:10 1cd06ff0-79a6-4006-b70b-b0bf0c7341b4/
drwxrwxrwx+ 2 sosal sosal 4096 Dec 17 09:26 22a5397c-e620-4f24-8603-a83a8cb8789f/
drwxrwxrwx+ 2 sosal sosal 4096 Dec 17 06:40 24e8140e-64bd-4c8f-a3d4-3c90a25ea52c/
(이하 생략)
여기서 디렉토리 이름만 dirs라는 파일에 담아 저장하는 방법은 다음과 같다.
[sosal@sosal tmpFiles]$ ls -d */ > dirs
dirs를 읽으면 다음과 같다.
[sosal@sosal tmpFiles]$ cat dirs
013f164c-51bc-44f3-94ac-bf8d5f1bb2d1
023d2318-c291-4a37-823c-7fb3d15f65e9
05d3e21a-bd8e-45fe-b313-4ddca9cdc4f7
124f6aaa-d9f1-4c60-a54b-f967942064de
1451adb6-cf32-4bfb-8364-7fd0d197775f
188093e3-e1e6-4974-b140-0d92debc3c22
19bdfb90-2b14-46e6-83cd-bf766cac6b1e
1a0420e0-0417-42ec-a87a-c3e77dfadc9c
1a179d67-8165-4c45-8fac-9b45d74b7ac1
1b1d5874-e899-4da5-b82e-89a329b643d8
1d542e8b-fc2c-4e89-b024-4b8f9e8e4635
22dd9910-5a25-4c97-b290-98e730ff3a42
26a03f1f-f4e2-4dd5-a8b0-b8cdea2e0b55
2ae8b6c3-99bd-4fe9-a97b-a9026155259f
............. (이하 생략)
- 조건
현재 디렉토리에, 다른 디렉토리가 약 1000개 넘게 존재하며, 각각 디렉토리에는 파일 2개가 존재한다.
위의 디렉토리 목록에 들어있는 파일을 현재풀더로 옮기는 작업을 하고자 한다.
해야 할 행동은 4가지로 나눌 수 있다.
1. dirs 파일을 읽어, 모든 디렉토리 이름을 가져온다.
2. 읽은 각 줄의 디렉토리 이름에 따라 cd 명령어로 이동한다.
3. 모든 파일을 원하는 곳으로 이동시킨다. (여기서는 각 디렉토리의 상위폴더)
4. 다시 상위 디렉토리로 돌아와서 2번을 반복한다.
해당 내용을 쉘 스크립트로 구현하면 다음과 같다.
cat dirs | while read line; do cd $line; mv * ../; cd ..; done
위의 스크립트를 개행하여 나타내면 매우 쉽게 이해할 수 있다.
cat dirs # dirs 파일을 읽어, 모든 디렉토리 이름을 가져온다.
while read line; # 읽은 각 줄의 디렉토리 이름에 따라서
do cd $line; # cd 명령어로 이동한다.
mv * ../; # 모든 파일을 원하는 곳으로 이동시킨다.
cd ../; # 상위 디렉토리로 돌아간다. (while을 다시 반복한다.)
done
while loop 안에 있는 쉘 스크립트만 살짝 수정하면 쉽게 응용할 수 있다.
'Linux > Linux_technic' 카테고리의 다른 글
Linux shell - 프로그램 실행시간 구하기 (1) | 2016.03.14 |
---|---|
리눅스에서 쓰여지고 있는 파일 계속 읽는법 (0) | 2015.07.31 |
리눅스 파일이름, 확장자 한꺼번에 바꾸기 (0) | 2015.07.07 |
nohup - 터미널을 종료해도 꺼지지 않는 프로세스 실행 (2) | 2015.06.28 |
ps에서 pid 목록만 가져와서 kill하기 [GAWK] (1) | 2015.05.17 |