我不明白 cygwin 的 find 版本是否有什么奇怪的地方。
在Z:\ANIME E CARTONI\# DA SISTEMARE ED ESTRARRE _ DVD\# 22我有這些檔案夾
folder1
folder2
folder3
folder1 和 folder2 的大小 > 4mb,所以理論上它們應該移動到 over40gb 檔案夾,但這不會發生
#!/bin/bash
z="/cygdrive/Z/ANIME E CARTONI/# DA SISTEMARE ED ESTRARRE _ DVD/# 22"
target="/cygdrive/Z/ANIME E CARTONI/# DA SISTEMARE ED ESTRARRE _ DVD/# 22/over40gb/"
size="3M"
mkdir -p "$target"
find "$z" -maxdepth 1 -type f -size "$size" -exec mv "{}" "$target" \;
編輯:這個解決方案有效
z=/cygdrive/C/Users/Administrator/Desktop/test/
mkdir -p /cygdrive/C/Users/Administrator/Desktop/test/over40gb/
for x in $(ls -1 --color=never -d ${z}*/); do
y=$(du --max-depth=0 --block-size=1M $x | awk '{print $1}')
if [ $y -ge 4 ]; then
mv ${x} /cygdrive/C/Users/Administrator/Desktop/test/over40gb/
fi
done
但它給我回傳了一條錯誤訊息
mv: cannot move '/cygdrive/C/Users/Administrator/Desktop/test/over40gb/' to a subdirectory of itself, '/cygdrive/C/Users/Administrator/Desktop/test/over40gb/over40gb'
但是當我嘗試使用帶有空格的路徑時
z="/cygdrive/Z/ANIME E CARTONI/# DA SISTEMARE ED ESTRARRE _ DVD/# 22"
mkdir -p "/cygdrive/Z/ANIME E CARTONI/# DA SISTEMARE ED ESTRARRE _ DVD/# 22/over40gb/"
for x in $(ls -1 --color=never -d ${z}*/); do
y=$(du --max-depth=0 --block-size=1M $x | awk '{print $1}')
if [ $y -ge 4 ]; then
mv ${x} "/cygdrive/Z/ANIME E CARTONI/# DA SISTEMARE ED ESTRARRE _ DVD/# 22/over40gb/"
fi
done
它回傳給我這個錯誤
https://imgur.com/6uZe65L.png
uj5u.com熱心網友回復:
你需要雙引號你的變數擴展并過濾掉目錄over40gb。另外,使用ls也不好。
z="/cygdrive/Z/ANIME E CARTONI/# DA SISTEMARE ED ESTRARRE _ DVD/# 22"
mkdir -p "$z/over40gb" || exit 1
for dir in "$z"/*/
do
[ "$z/over40gb/" = "$dir" ] && continue
size=$(du -sk "$dir" | awk 'NR == 1 {print $1}')
[ "$size" -ge 4096 ] && mv "$dir" "$z/over40gb/"
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487298.html
