我正在尝试过滤.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" \)