2013-08-22 62 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

相關問題