2017-08-31 1 views
0

Dies ist mein erster Tag Scripting, ich benutze Linux, aber brauchte ein Skript, das ich habe mein Gehirn zerreißen, bis ich schließlich um Hilfe bitten. Ich muss ein Verzeichnis überprüfen, in dem bereits Verzeichnisse vorhanden sind, um zu sehen, ob neue Verzeichnisse hinzugefügt werden, die nicht erwartet werden.Bash-Check für Unterverzeichnisse im Verzeichnis


Ok Ich denke, ich habe das so einfach wie möglich. Das Folgende funktioniert, zeigt aber auch alle Dateien im Verzeichnis an. Ich werde weiter daran arbeiten, es sei denn jemand kann mir sagen, wie man die Dateien nicht auch auflisten | Ich habe ls -d versucht, aber es tut das Echo "nichts Neues". Ich fühle mich wie ein Idiot und hätte das früher haben sollen.

#!/bin/bash 

workingdirs=`ls ~/ | grep -viE "temp1|temp2|temp3"` 

if [ -d "$workingdirs" ] 
then 
echo "nothing new" 

else 

echo "The following Direcetories are now present" 
echo "" 
echo "$workingdirs" 

fi 
+1

Was funktioniert nicht? –

+0

Verwenden Sie den Befehl find. So etwas wie "finde ~/-type d | grep ..." –

Antwort

0

Wenn Sie etwas unternehmen möchten, wenn ein neues Verzeichnis erstellt wird, verwenden Sie inotifywait. Wenn Sie nur überprüfen wollen, zu sehen, dass die Verzeichnisse, die diejenigen sind, existieren Sie erwarten, könnten Sie so etwas wie tun:

trap 'rm -f $TMPDIR/manifest' 0 

# Create the expected values. Really, you should hand edit 
# the manifest, but this is just for demonstration. 
find "$Workingdir" -maxdepth 1 -type d > $TMPDIR/manifest 

while true; do 
    sleep 60 # Check every 60 seconds. Modify period as needed, or 
      # (recommended) use inotifywait 
    if ! find "$Workingdir" -maxdepth 1 -type d | cmp - $TMPDIR/manifest; then 
     : Unexpected directories exist or have been removed 
    fi 
done 
0

Below Shell-Skript zeigen Verzeichnis vorhanden ist oder nicht.

#!/bin/bash 

Workingdir=/root/working/ 
knowndir1=/root/working/temp1 
knowndir2=/root/working/temp2 
knowndir3=/root/working/temp3 
my=/home/learning/perl 

arr=($Workingdir $knowndir1 $knowndir2 $knowndir3 $my) #creating an array 

for i in ${arr[@]}  #checking for each element in array 
do 
     if [ -d $i ] 
     then 
     echo "directory $i present" 
     else 
     echo "directory $i not present" 
     fi 
done 

Ausgang:

directory /root/working/ not present 
directory /root/working/temp1 not present 
directory /root/working/temp2 not present 
directory /root/working/temp3 not present 
**directory /home/learning/perl present** 
+0

Ich brauche nicht zu wissen, ob die erwarteten dirs nur diejenigen sind, die auftauchen, die nicht erwartet werden. Also sag ich habe temm1 temp2 und temp3 die ich kenne sind da. Wenn unknowndir1 erscheint, muss ich wissen, dass es da ist. Das ist es. Ich versuche, so einfach wie möglich zu machen, lol, danke für deine Hilfe – decini

0

Dadurch werden die verfügbaren Verzeichnisse in einer Liste in einer Datei speichern. Wenn Sie das Skript ein zweites Mal ausführen, meldet es Verzeichnisse, die gelöscht oder hinzugefügt wurden.

#!/bin/sh 

dirlist="$HOME/dirlist" # dir list file for saving state between runs 
topdir='/some/path'  # the directory you want to keep track of 

tmpfile=$(mktemp) 

find "$topdir" -type d -print | sort -o "$tmpfile" 

if [ -f "$dirlist" ] && ! cmp -s "$dirlist" "$tmpfile"; then 
    echo 'Directories added:' 
    comm -1 -3 "$dirlist" "$tmpfile" 

    echo 'Directories removed:' 
    comm -2 -3 "$dirlist" "$tmpfile" 
else 
    echo 'No changes' 
fi 

mv "$tmpfile" "$dirlist" 

Das Skript wird Probleme mit Verzeichnissen, die sehr exotische Namen (mit Zeilenumbrüchen) haben.

Verwandte Themen