簡體   English   中英

如果內容少於4GB,則使用BASH復制文件夾

[英]Using BASH to copy folder if contents are under 4gb total

我有這個腳本復制目錄

for dir in $(pwd)/*/
do
        dir=${dir%*/}
        dirsize=$(du -chk "${dir##*/}" | grep total)
        kbsize=${dirsize%total}
        if [[ "$kbsize" -lt 4194304 ]]
        then
                cp -rv * "$1"
        fi
done

我試圖讓它僅在目錄小於4GB時復制目錄(由於FAT32限制)。 問題在於它會復制所有內容,而不僅僅是復制4GB以上的目錄。

我確信這有點愚蠢,因為我的BASH知識不是那么好。 有任何想法嗎?

問題出在您的du命令上。 運行此命令將產生:

$ du -chk .
# ...
18M     total

結果,您的kbsize變量包含18M bash不喜歡這樣:

$  [[ 18M -lt 923898 ]]; echo $?
bash: [[: 18M: value too great for base (error token is "18M")
1

將命令替換為du -sk

$ kbsize=$(du -sk . | awk '{print $1}')
$ echo $kbsize
18196
$ [[ $kbsize -lt 4194304 ]]; echo $?
0 # Success!
$ [[ $kbsize -lt 10 ]]; echo $?
1 # Fails, but no errors

cp語句中的*被擴展為包括pwd所有目錄名稱。 因此,如果有4gb以下的目錄,它將嘗試復制每個目錄。

我建議你使用-t選項cp來指定哪些文件應該被復制的目標目錄,並從該命令刪除*。

同樣,正如其他人提到的那樣,簽出du-s選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM