find 命令无法正确按大小过滤文件

find 命令无法正确按大小过滤文件

我正在尝试过滤.out大小.txt为 8 到 15 个字节(不包括)的文件。在调用 shell 时,搜索文件的目录是作为第一个参数给出的。

输入目录 temp:

my@computer:/$ ll temp
total 80
-rw-r--r-- 1 asistent users 17 May 25 19:04 file1.exe
-rw-r--r-- 1 asistent users 13 May 25 19:04 file1.out
-rw-r--r-- 1 asistent users 25 May 25 19:04 file1.pdf
-rw-r--r-- 1 asistent users  9 May 25 19:04 file1.txt
-rw-r--r-- 1 asistent users 17 May 25 19:04 file2.exe
-rw-r--r-- 1 asistent users 25 May 25 19:04 file2.out
-rw-r--r-- 1 asistent users 25 May 25 19:04 file2.pdf
-rw-r--r-- 1 asistent users 13 May 25 19:04 file2.txt
-rw-r--r-- 1 asistent users 25 May 25 19:04 file3.exe
-rw-r--r-- 1 asistent users  5 May 25 19:04 file3.out
-rw-r--r-- 1 asistent users  9 May 25 19:04 file3.pdf
-rw-r--r-- 1 asistent users 21 May 25 19:04 file3.txt
-rw-r--r-- 1 asistent users 17 May 25 19:04 file4.exe
-rw-r--r-- 1 asistent users 17 May 25 19:04 file4.out
-rw-r--r-- 1 asistent users 29 May 25 19:04 file4.pdf
-rw-r--r-- 1 asistent users 25 May 25 19:04 file4.txt
-rw-r--r-- 1 asistent users 13 May 25 19:04 file5.exe
-rw-r--r-- 1 asistent users  5 May 25 19:04 file5.out
-rw-r--r-- 1 asistent users  9 May 25 19:04 file5.pdf
-rw-r--r-- 1 asistent users  9 May 25 19:04 file5.txt

我的脚本是:

#!/bin/bash


if [ $# -ne 1 ]; then
        echo "USAGE: $BASH_SOURCE <SOURCE>"
        exit 1
fi

if [ ! -d $1 ]; then
        echo "Source directory does not exist"
        exit 1
fi

mkdir output

#filtering files here
allFiles=`find $1 -type f -size -15c -size +8c -iname "*.txt" -o -iname "*.out"`

#echo $allFiles

for file in ${allFiles[*]}; do
        #echo "Copying file $file"
        `cp $file output`
done

我的输出是:

total 40
-rw-r--r-- 1 181185 domain users 25 May 26 14:00 file1.out
-rw-r--r-- 1 181185 domain users  9 May 26 14:00 file1.txt
-rw-r--r-- 1 181185 domain users 17 May 26 14:00 file2.out
-rw-r--r-- 1 181185 domain users 13 May 26 14:00 file2.txt
-rw-r--r-- 1 181185 domain users  9 May 26 14:00 file3.out
-rw-r--r-- 1 181185 domain users  9 May 26 14:00 file3.txt
-rw-r--r-- 1 181185 domain users  5 May 26 14:00 file4.out
-rw-r--r-- 1 181185 domain users 13 May 26 14:00 file4.txt
-rw-r--r-- 1 181185 domain users  5 May 26 14:00 file5.out
-rw-r--r-- 1 181185 domain users  9 May 26 14:00 file5.txt

注意我有大小为 17 和 25 的文件。有人可以向我解释一下这个命令的正确用法和我的错误吗?

答案1

寻找,‘OR’-o运算符的优先级低于所有其他运算符之间隐含的‘AND’。因此,条件的评估方式如下:

\( -size -15c -size +8c -iname "*.txt" \) -o \( -iname "*.out" \)

但你真正想要的是这个:

-size -15c -size +8c \( -iname "*.txt" -o -iname "*.out" \)

相关内容