我正在开发一个具有2个输入参数的unix脚本 - 路径和大小。
该脚本将使用给定的大小检查给定路径中的所有文件并删除它们。如果删除操作失败,则将相应的文件名记录到文件中。对于任何其他情况,文件将在没有任何操作的情况下呈现。
我写了一个简短的代码(不知道它是否有效)。
find $path -type f -size +${byte_size}c -print | xargs -I {}
if $?=1;
then
rm -rf {};
else
echo {} >> Error_log_list.txt'
其中
$path
是我们搜索文件的路径
size
是输入尺寸
Error_log_list.txt
是我们发送不可删除文件名的文件。
有谁可以帮我验证一下是否正确?
答案 0 :(得分:1)
对于这个确切的用例,GNU find有一个-delete
选项。 find
documentation中的更多信息(以及许多不同的方法)。
find $path -type f -size +${byte_size}c -delete
答案 1 :(得分:0)
我写了一个脚本,请检查此功能
a=`find . -type f -size +{$size}c -print`
#check if $a is empty
if [ -z "$a" ]
then
echo $a > error_log.txt
#if a is not empty then remove them
else
rm $a
fi
让我解释一下我们在这里做了什么。
首先在当前目录中分配file_names(满足 大小要求)变量'a'
检查该变量是否为 如果a,则为空(空表示没有符合您的大小要求的文件) 有一些值然后删除它们
答案 2 :(得分:0)
执行脚本会导致以下语法错误:
./test.sh: line 9: unexpected EOF while looking for matching `''
./test.sh: line 11: syntax error: unexpected end of file
此外,if语句的条件似乎不正确。 如果我没有错,它会在之前测试“rm”命令的返回码 执行命令。
我不熟悉xargs,我试图重写你的脚本 使用while循环结构。这是我的剧本
#!/bin/bash
path=$1
byte_size=$2
find $path -type f -size +${byte_size}c -print | while read file_name
do
rm -f $file_name
if [ ! $? -eq 0 ]; then
echo $file_name >> Error_log_list.txt
fi
done
我测试了它试图在没有正确许可的情况下删除文件,但它确实有效。