2014-10-03 190 views
0

我有30k +圖像和許多保存這些圖像的文件夾。我想要的是每個文件夾有100個圖像。有誰知道可以幫助我的Linux程序/腳本?將文件組移動到子目錄

最好我希望程序/腳本能夠創建目錄(即圖像001,圖像002,圖像003等),然後放置100個圖像(不同的擴展名.gif .jpg .png .bmp .webm)在每個文件夾中。

+0

你打算如何將文件分區到文件夾?隨機?按名字?按類型?通過目錄輸入順序? – 2014-10-03 01:24:26

+0

隨機所有我真正想要的是每個文件夾100個文件,所以它更容易管理。 – ilovepoker 2014-10-03 01:27:01

+0

每個文件夾100個隨機文件聽起來並不容易管理,因爲你永遠無法找到任何東西......沒有某種外部索引機制。但如果這就是你真正想要'xargs'可能會有所幫助。 – 2014-10-03 01:42:02

回答

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 

移動剩餘的文件,以img_misc

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

如果你是在Linux上,GNU mv命令有一個方便的選擇-t target-directory這對xargs有用,但在這裏我們需要每100個文件創建一個不同的目標目錄,所以我們不會使用-t

xargs命令可以將文件名分組爲100個組。殘留問題是確定目標的目錄名稱。爲此,一個shell腳本是適當的:

#!/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,你現在可以運行類似:

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

注意-print0-0主要是GNU擴展findxargs,但Mac OS X findxargs也支持它們。 選項xargs也是一個GNU擴展;它不支持Mac OS X xargs,它沒有等效。它也被稱爲--no-run-if-empty;這意味着如果沒有列出文件名,則xargs不運行程序movefiles.sh,這與標準xargs不同,即使沒有文件名也需要運行該命令至少一次。如果您沒有-r,則可以使用if [ $# != 0 ]; then …current script…; fi修改腳本,以便在用零參數調用該腳本時對其進行保護。

相關問題