2016-01-05 20 views
1

一個文件系統,代表一本書,其中有一個目錄代表每個章節和每個章節,其中每個page/.png文件在目錄中作爲第n章的q部分的p頁。頁面將被列爲0/0/0,但是頁面456可能是第三章,而第二部分的頁面4會將其從包含所有其他頁面/ .png文件的目錄中製作爲2/1/3。從文件系統創建書籍

bash腳本如何通過遞歸搜索每個目錄並將相應的頁面組織到正確的頁面,其中文件系統可以像book/pdf一樣閱讀?因此,頁面1(文件系統中的0/0/0)將位於具有閃爍標籤的新目錄中,顯示1或001,而頁面/文件456(2/1/3)將顯示爲美妙的456?

我發現,使用類似下面的一對夫婦類似的問題,

find . type -d | while read -r d '' file; do mv .'{$d} done 

其中發現內的目錄。但卡住重命名文件。所以我追捕了下面的腳本。

#!/bin/bash 
cd 
list=find `"path/to . " -type d` 
    for directory in $list; do 
    echo "directory=$directory" 
    cd $directory 
    imglist="ls | grep '\.png'" 
    for file in $imglist; do 
     mv home/ 
    done 
    cd 
done 
#I didn't write either of these 

但只有兩個級別良好。

那麼如何才能最好地從雜亂的文件系統轉到一個簡化的目錄。

+1

你能否讓它更清楚輸入目錄結構是什麼以及如何確定輸出結果?我不清楚爲什麼'0/0/0'應該映射到'1','2/1/3'映射到'456'。較小規模的例子會很有用。 –

回答

0

如果我理解正確的,下面可以幫助

bookroot='.' #the directory where are the chapters 
final="./finalbook" #the destination 

pages=($(find "$bookroot"/[0-9]* -name \*.png -print | sed "s:$bookroot/::" | sort -t/ -k1n -k2n -k3n)) 
for i in "${!pages[@]}" 
do 
    echo cp "$bookroot/${pages[$i]}" "$final/$((i+1))_of_${#pages[@]}.png" 
done 

這是試運行。如果滿意,請刪除echo