0

代码如下,我想检查一些文件大小小于 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")

有没有人有关于如何解决这个问题的想法?谢谢!

4

3 回答 3

3
du -b file

它将打印文件大小和名称。仅用于cut获取大小:

du -b file | cut -f 1
于 2012-11-20T07:46:47.353 回答
0

而不是使用如此复杂的表达式,只需执行以下操作:

find . -maxdepth 1 -regex '.*/dataset[0-9]+' -size -410c

(请注意, -maxdepth 和 -regex 都是要查找的 gnu 扩展。由于您的问题被标记为 linux,因此这些选项可能可用。)

于 2012-11-20T14:56:10.210 回答
0

使用 bash 扩展通配符来限制文件循环:

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
于 2012-11-20T15:26:06.217 回答