2017-08-31 169 views
0

這是我的第一天腳本編寫,我使用的是linux,但需要一個腳本,直到我最終尋求幫助之前,我一直在搗鼓我的大腦。我需要檢查已經存在目錄的目錄,以查看是否添加了不需要的新目錄。bash檢查目錄下的子目錄


好吧我想我已經得到了這個儘可能簡單。下面的工作,但也顯示目錄中的所有文件。 我會繼續工作,除非有人能告訴我如何不要列出文件 |我嘗試過ls -d,但它正在做回聲「沒有新東西」。我覺得自己像一個白癡,應該早點得到它。

#!/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

什麼不起作用? –

+0

使用find命令。類似於「find〜/ -type d | grep ...」 –

回答

0

如果您想在創建新目錄時採取一些措施,請使用inotifywait。如果你只是想檢查一下是否存在的目錄是你所期望的的,你可以這樣做:

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

以下shell腳本將顯示目錄存在。

#!/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 

輸出:

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

我不需要知道預期的dirs是否只出現預期的dirs。所以說,我有temm1 temp2和temp 3,我知道在那裏。如果說unknowndir1出現,我需要知道它在那裏。而已。我正在儘可能簡單地做出大聲笑,謝謝你的幫助 – decini

0

這將節省可用的目錄列表中的一個文件。當您再次運行腳本時,它會報告已刪除或添加的目錄。

#!/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" 

該腳本將具有非常奇特的名稱(包含換行符)目錄的問題。