2012-06-04 72 views
2

按字母順序排列的文件夾拷貝文件我試圖複製了一系列在Ubuntu使用bash文件和文件夾。這是很重要的文件按字母順序被複制,因爲它們是在讀取它們被加入到閃存驅動器的順序文件數碼相框會。從我發現的情況來看,Nautilus根據inode編號複製它們,因此它們在相框上失序。在BASH的Ubuntu

從我已經做了搜索,我想出了下面的命令:

for i in "$(find * -type f -print0 | sort)"; do cp -v "$i" "/media/PicFrame/$i"; done 

這導致了錯誤的文件名過長。看起來BASH試圖製作一個文件,每個文件名都用「\ n」分隔。我嘗試刪除一些引號,但是在嘗試複製文件名稱時會導致出現幾個「無法統計」錯誤(因爲其中有很多空格)。

如何使這項工作任何想法?我接受其他方法,但我真的很喜歡這是一個單一的命令/腳本,我可以在每個月更換圖片時運行。 (我一直在Windows中做這個,但是現在我試圖在Ubuntu中做所有事情,我已經來回了大約兩年了。)

回答

2

改爲使用read代替while循環。

find ... | while read file 
do 
    cp ..."$file"... 
done 

你可能要考慮使用rsync雖然代替。

+0

甜,rsync看起來正是我所需要的。謝謝! – user1055261

+1

另外,前者的工作,他將不得不從'find' – mVChr

+1

@mVChr刪除'-print0':或者從--files0 - = - '加上''到如果sort'他的版本支持它(這是可能是因爲他使用Ubuntu)。 –

2

正如Ignacio所提到的,如果您使用的是find,則應該使用while read循環。

如果您不需要遞歸(你的文件都在一個目錄級別),你可以使用一個for循環使用通配符。使用這種技術時,你不需要使用sort,因爲水珠保證在字典順序將擴大爲您的區域設置(即「分類」)。

for file in * 
do 
    cp "$file" dest 
done 

你應該注意到在你的問題腳本中的問題的一部分是,你正在使用print0管道的find輸出到sort。爲了完成這項工作,如果您的版本具有該功能,您將需要適當的選項sort

find ... -print0 | sort --files0-from=-