0

我正在研究一个具有 2 个输入参数的 unix 脚本 - pathsize

该脚本将检查给定路径中具有给定大小的所有文件并删除它们。如果删除操作失败,则将相应的文件名记录到文件中。对于任何其他情况,文件会在没有任何操作的情况下呈现。

我写了一个简短的代码(不知道它是否有效)。

find $path -type f -size +${byte_size}c -print | xargs -I {}
if $?=1;
then
rm -rf {};
else
echo {} >> Error_log_list.txt'

where
$path是我们搜索文件的路径。
size是输入大小。
Error_log_list.txt是我们发送不可删除文件名的文件。

谁能帮我验证它是否正确?

4

3 回答 3

1

GNU find-delete为这个确切的用例提供了一个选项。find文档中的更多信息(以及许多不同的方法)。

find $path -type f -size +${byte_size}c -delete
于 2013-08-22T10:36:20.177 回答
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. 首先将当前目录中的文件名(满足大小要求)分配给变量“a”

  2. 检查该变量是否为空(空意味着没有符合您的大小要求的文件)如果 a 有一些值,则删除它们

于 2013-08-22T10:23:46.540 回答
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

我测试了它试图在没有正确权限的情况下删除文件并且它有效。

于 2013-08-22T10:28:49.253 回答