2014-10-03 9 views
0

30k + 개의 이미지와이 이미지를 저장하는 많은 폴더가 있습니다. 내가 원하는 것은 폴더 당 100 개의 이미지를 갖는 것입니다. 누구든지 이걸 도와 줄 Linux 프로그램/스크립트를 알고 있습니까?파일 그룹을 하위 디렉토리로 이동

나는 프로그램/스크립트가 디렉토리 (예 : images-001, images-002, images-003 등)를 만들고 나서 100 개의 이미지 (확장명 .gif .jpg .png .bmp .webm) 각 폴더에.

+0

어떻게 파일을 폴더로 분할 할 계획입니까? 무작위로? 이름으로? 유형별? 디렉토리 항목 순서로? –

+0

내가 정말로 원하는 것은 폴더 당 100 개 파일이므로 관리가 더 쉽습니다. – ilovepoker

+0

폴더 당 100 개의 임의 파일은 어떤 종류의 외부 색인 메커니즘 없이는 아무 것도 찾을 수 없으므로 관리하기가 쉽지 않습니다. 그러나 그것이 정말로 당신이 원하는 것이'xargs'가 도움이 될 것입니다. –

답변

0

단순히 더 나은 조직 파일에 대한 표준 및 더 많은 제어 명령을 사용

cd <your_image_folder_pathname>  
mkdir img_jpg img_gif img_bmp img_tiff 

mv *.jpg img_jpg 
mv *.gif img_gif 
mv *.bmp img_bmp 
mv *.tiff img_tiff 

이동 나머지 파일은 리눅스에있는 경우

mkdir img_misc 
find -type f | xargs -I {} mv {} img_misc 
0

을 img_misc하려면 GNU mv 명령은 편리한 옵션이 -t target-directoryxargs에서 유용 할 수 있지만 여기서 100 개의 파일마다 다른 대상 디렉토리를 만들어야하므로 -t을 사용하지 않을 것입니다.

xargs 명령은 파일 이름을 100 세트로 그룹화 할 수 있습니다. 잔여 문제는 대상의 디렉토리 이름을 결정하는 것입니다.

#!/bin/bash 

mkdir -p images-000 
dirnum=$(ls -d images-[0-9][0-9][0-9] | sed -n '$s/images-//p') 
newdir="images-$(($dirnum + 1))" 
mv "[email protected]" "$newdir" # or: qmv -t "$newdir" "[email protected]" 
rm -fr images-000 

images-000 디렉토리 물건을 초기화하기 위해 만들어 지지만 모든 파일의 대상이 결코 :이를 위해, 쉘 스크립트 적합합니다. 이번에는 ls을 구문 분석해도 괜찮습니다. 목록에있는 이름에는 공백, 개행 문자 또는 기타 어색한 문자가 포함되지 않기 때문입니다. (일반적으로, ls의 출력을 구문 분석에 대해 매우 신중해야합니다.) move-files.sh라는 해당 스크립트와

, 당신은 지금과 같이 실행할 수 있습니다 -0 주로 GNU 확장 find위한

find /source/place-1 /opt/photos/place-2 … -type f -print0 | 
xargs -0 -n 100 -r -- movefiles.sh 

-print0 것을 및 xargs이지만 Mac OS X findxargs도 지원합니다. xargs에 대한 -r 옵션도 GNU 확장입니다. Mac OS X xargs에는 지원되지 않으며 해당 항목이 없습니다. 또한 --no-run-if-empty으로 알려져 있습니다. 파일 이름이 없으면 xargs은 프로그램 을 실행하지 않음을 의미합니다. 표준 파일 번호가 없어도 명령을 한 번 이상 실행해야하는 표준 xargs과는 다릅니다. -r이없는 경우 if [ $# != 0 ]; then …current script…; fi으로 스크립트를 수정하여 인수가 0 인 경우 스크립트를 보호 할 수 있습니다.

관련 문제