我有30k +圖像和許多保存這些圖像的文件夾。我想要的是每個文件夾有100個圖像。有誰知道可以幫助我的Linux程序/腳本?將文件組移動到子目錄
最好我希望程序/腳本能夠創建目錄(即圖像001,圖像002,圖像003等),然後放置100個圖像(不同的擴展名.gif .jpg .png .bmp .webm)在每個文件夾中。
我有30k +圖像和許多保存這些圖像的文件夾。我想要的是每個文件夾有100個圖像。有誰知道可以幫助我的Linux程序/腳本?將文件組移動到子目錄
最好我希望程序/腳本能夠創建目錄(即圖像001,圖像002,圖像003等),然後放置100個圖像(不同的擴展名.gif .jpg .png .bmp .webm)在每個文件夾中。
只需使用標準和更可控的命令爲更好地組織文件:
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
如果你是在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擴展find
和xargs
,但Mac OS X find
和xargs
也支持它們。 選項xargs
也是一個GNU擴展;它不支持Mac OS X xargs
,它沒有等效。它也被稱爲--no-run-if-empty
;這意味着如果沒有列出文件名,則xargs
不運行程序movefiles.sh
,這與標準xargs
不同,即使沒有文件名也需要運行該命令至少一次。如果您沒有-r
,則可以使用if [ $# != 0 ]; then …current script…; fi
修改腳本,以便在用零參數調用該腳本時對其進行保護。
你打算如何將文件分區到文件夾?隨機?按名字?按類型?通過目錄輸入順序? – 2014-10-03 01:24:26
隨機所有我真正想要的是每個文件夾100個文件,所以它更容易管理。 – ilovepoker 2014-10-03 01:27:01
每個文件夾100個隨機文件聽起來並不容易管理,因爲你永遠無法找到任何東西......沒有某種外部索引機制。但如果這就是你真正想要'xargs'可能會有所幫助。 – 2014-10-03 01:42:02