2016-05-22 4 views
0

Hallo Leute pls Hilfe zu diesem Thema ...Bash-Skript immer Fehler in Dateien

[[email protected] ~]# cat test.sh 
#!/bin/bash 
cd /vol/cdr/MCA 
no='106' 
value='55' 
size=`df -kh | grep '/vol/cdr/MCA' | awk '{print $5}'| sed 's/%//g'` 
if [ "$size" -gt "$value" ] ; 
then 
delete=$(($size-$value)) 
echo $delete 
count=$(($no*$delete)) 
`ls -lrth | head -n $count | xargs rm -rf` 
fi 

Ausgang:

+ cd /vol/cdr/MCA 
+ no=106 
+ value=55 
++ df -kh 
++ grep /vol/cdr/MCA 
++ awk '{print $5}' 
++ sed s/%//g 
+ size=63 
+ '[' 63 -gt 55 ']' 
+ delete=8 
+ echo 8 
8 
+ count=848 
++ ls -lrth 
++ head -n 848 
++ xargs rm -rf 
rm: invalid option -- 'w' 
Try `rm --help' for more information.`` 

Ich mag diese Dateien löschen, die in $ count.

+0

Bitte nehmen Sie sich einen Blick auf [Bearbeitungshilfe] (http://stackoverflow.com/editing-help). – Cyrus

+0

Wenn du in das Verzeichnis gehst und 'ls -lrth | Kopf -n 848', was bekommst du dann? Erhalten Sie eine gültige Liste von Dateien? Es gibt keine * Datei * namens "-w"? –

+0

ja bekomme eine gültige Liste. Es gibt keine Datei namens w – rohit

Antwort

0

warum sind vorbei Sie

ls -l 

Verwendung nur, es wird die Liste der Datei größer ist als gegebene Größe zu finden, wenn Sie diese Liste in einer Datei erhalten Sie dann Liste der Dateien übernehmen können, die sein gelöscht oder was auch immer

find /vol/cdr/MCA -type f -size +56320c -exec ls '{}' \; 
+0

in diesem Verzeichnis hat jede Datei die gleiche Größe, d. H. 9,6 MB. Ich möchte tun, dass es die ältesten Dateien löschen wird, wenn es 75% – rohit

+0

Ich denke, dass Sie alte Dateien basierend auf Daten bereinigen wollen, bekomme oft diese Frage, überprüfen Sie meinen Blog, wenn es Ihnen hilft http: // San-Linux. blogspot.in/2010/06/find-files-betweend-dates.html – Sanjeev

0
> `ls -lrth | head -n $count | xargs rm -rf` 

Diese Zeile mehrere Probleme hat. Die Backticks sind überflüssig, und Sie übergeben die Verzeichnisberechtigung, die Dateigröße, die Besitzerinformationen usw., als ob diese Teil des eigentlichen Dateinamens wären.

Die minimale Fix ist die Backticks und die -l Option ls (und nebenbei bemerkt, die -r Option rm sieht fehl am Platz, auch) zu verlieren; aber wirklich, würde eine richtige Lösung ls hier überhaupt nicht verwenden.

1

Der Befehl ls -lrth drucken Zeilen wie:

-rw-r--r-- 1 bize bize 0 may 22 19:54 text.txt 
-rw-r--r-- 1 bize bize 0 may 22 19:54 manual.pdf 

der Text an den rm Befehl gegeben wird als Optionen

$ rm -rw-r text.txt 
rm: invalid option -- 'w' 

Liste nur die Namen der Dateien interpretiert werden. Das heißt: die lange -l Option ls entfernen (und die -h Option, da sie nur mit -l funktionieren):

$ ls -1rt | head -n "$count" | xargs 

Aber bitte: nicht ein rm -rf automatische machen, das ist ein sicherer Weg, um zukünftige Probleme.

Vielleicht ?:

$ ls -1rt | head -n "$count" | xargs -I{} echo rm -rf /vol/cdr/MCA/'{}' \;