代码如下,我想检查一些文件大小小于410Bytes的文件:
for file in *; do
if [[ "$file" =~ ^dataset([0-9]+)$ && `du -b $file/${BASH_REMATCH[1]}_conserv.png` -lt 410 ]]; then
cd $file
$some_commands
cd ..
fi
done
然而,当我运行这个脚本时,它抱怨如下:
less_than_410.bash: line 2: [[: 13605 dataset4866/4866_conserv.png: syntax error in expression (error token is "dataset4866/4866_conserv.png")
有没有人有关于如何解决这个问题的想法?谢谢!
答案 0 :(得分:3)
du -b file
它将打印文件大小和名称。使用cut
仅获取尺寸:
du -b file | cut -f 1
答案 1 :(得分:0)
不要使用这样复杂的表达式,而是执行:
find . -maxdepth 1 -regex '.*/dataset[0-9]+' -size -410c
(请注意,-maxdepth和-regex都是要查找的gnu扩展名。由于您的问题标记为linux,因此可能会提供这些选项。)
答案 2 :(得分:0)
使用bash extended globbing来限制文件循环:
shopt -s extglob
for file in dataset+([0-9]); do
num=${file#dataset}
(( $(stat -c %s "$file/${num}_conserv.png") >= 410 )) && continue
do stuff here
done