2013-08-22 32 views
0

我正在研究一个具有2个输入参数的-unix脚本 - 路径大小用于查找文件并基于给定大小删除它们的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是我们发送不可删除文件名的文件。

任何人都可以请帮我验证它是否正确?

+4

要小心,在没有检查的情况下发布'rm -rf'会很危险。把它改成'ls'直到你确定它可以工作。 – fedorqui

+0

你在这里遇到什么错误或问题? – Mari

回答

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 

我测试了它试图删除文件没有正确的权限和它的作品。

+0

我按照@devnull的建议从rm命令中删除了-r开关 – wooghie

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. 检查是否该变量是 空(空装置有一个与你的尺寸的要求没有文件)如果 具有一定的价值,然后删除它们

1

对于这个确切的用例,GNU查找有一个-delete选项。在find documentation的更多信息(和一些不同的方法)。

find $path -type f -size +${byte_size}c -delete 
+0

好而简单! – mrki

相关问题