用于查找文件的Unix脚本&根据给定的大小删除它们

时间:2013-08-22 09:36:40

标签: shell unix

我正在开发一个具有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 是我们发送不可删除文件名的文件。

有谁可以帮我验证一下是否正确?

3 个答案:

答案 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

让我解释一下我们在这里做了什么。

  1. 首先在当前目录中分配file_names(满足 大小要求)变量'a'

  2. 检查该变量是否为 如果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

我测试了它试图在没有正确许可的情况下删除文件,但它确实有效。