[英]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.