2014-03-25 69 views
6

我有批量創建虛擬文件和目錄的問題。 我要創建這樣的事情:用循環bash循環的限制

dummy_directory_1/dummy_file_1 
dummy_directory_2/dummy_file_2 
dummy_directory_3/dummy_file_3 

for((i=1; $i <=1000; i++)); do 
    mkdir $(date --date="$i day ago" +%Y%m%d%H%M%S); 
    touch $(date --date="$i day ago" +%Y%m%d%H%M%S)/$(date --date="$i day ago" +%Y%m%d%H%M%S)_file; 
done 

不被創建的所有文件,因爲我收到以下錯誤:

touch: cannot touch `20140211230556/20140211230556_file': No such file or directory 
touch: cannot touch `20131105230559/20131105230559_file': No such file or directory 
touch: cannot touch `20130529000604/20130529000604_file': No such file or directory 

你知道的bash/linux對文件創建有一些限制嗎?當我使用grep搜索許多文件時,我遇到了類似的問題。 如果我改變循環$i<=10它的作品。 請幫忙。如果兩個date調用生成的目錄名相同秒內執行,如果出現這種情況改變其間的你最終的豬病名兩個不同的值

+2

是的,對了,還有通常_are_目錄大小限制(因文件系統不同,所以沒有一個正確回答關於他們究竟在何處) 。你可能會在稍後打 - 但通過只計算一次名字來確定比賽條件是一個好的第一步。 –

回答

10

您的代碼纔有效。

嘗試先在值存儲在一個變量:

for((i=1; i <= 1000; i++)); do 
    name=$(date --date="$i day ago" +%Y%m%d%H%M%S) 
    mkdir -p "$name" && 
    touch "$name/${name}_file" || 
    break 
done 
+0

你說得對。非常感謝你! :) – user3461823

+2

你甚至可能想把它改成'mkdir && touch'或'mkdir ||如果OP確實遇到了一些限制,並且'mkdir'開始失敗,那麼就可以打破這個限制。 –

+1

@AdrianFrühwirth - 有效點,我添加了一張支票... – mata