2015-10-08 45 views
-1

我正在啓動shellscripting,並且遇到了腳本問題。 所以,我有兩個Folers(無論他們的文件類型都不重要),我需要檢查folder1上的文件是否存在於文件夾2中。如果是,請檢查它的修改日期是否更新。檢查另一個文件夾中是否存在特定文件 - Shellscript

這是我有:

#!/bin/sh 

for i in `find $1 -type f` 
do 
    for j in `find $2 -type f` 
    do 
     if [ -e $2/$i ] 
     then 
      if [ $i -ot $j ] 
      then 
       echo File "`basename $i`" its newer and it will be copied 
      else 
       echo File is updated 
      fi 
     else 
      echo "`basename $i`" will be copied because it doesn't exist 
     fi 
    done 
done 

$ 1和$ 2的文件夾參數

在此先感謝

編輯: 隨着3個文件的文件夾1,其中之一(文件2)在文件夾2中我得到這個輸出。

我在文件夾1 3個文件,其中之一也是在文件夾2我得到了(文件2在這兩個文件夾):

file1 will be copied because it doesn't exist 
file2 will be copied because it doesn't exist 
file2 will be copied because it doesn't exist 
file1 will be copied because it doesn't exist 
file3 will be copied because it doesn't exist 
file3 will be copied because it doesn't exist 
+0

爲什麼它不起作用?輸出是什麼? – grimsock

+0

我在folder1中有3個文件,其中一個也在folder2中,我得到了(file2在兩個文件夾中): 'file1將被複制,因爲它不存在 file2將被複制,因爲它不存在 文件2將被複制,因爲它不存在 文件1將被複制,因爲它不存在 文件3將被複制,因爲它不存在 文件3將被複制,因爲它不exist' –

+0

請,更新後的並粘貼腳本輸出。 – grimsock

回答

0

有兩件事是錯的那個腳本: A.你不」因爲您正在對第一個目錄中的每個文件進行一些檢查,而不是第一個目錄中的每個文件以及第二個目錄中的每個文件(這就是爲什麼顯示這麼多文件的原因)。 B.當你使用find來獲取目錄中的文件時,你不需要路徑,只是文件名,你將在第二個目錄中檢查哪個存在。

下面是固定版本。讓我知道是否解決你的問題。

#!/bin/bash 

for i in `find $1 -type f -printf "%f\n" | sort`; 
do 
    if [ -e "$2/$i" ] 
    then 
    if [ "$1/$i" -ot "$2/$i" ] 
    then 
     echo "File basename $i its newer and it will be copied" 
    else 
     echo "File is updated" 
    fi 
    else 
    echo "basename $i will be copied because it doesn't exist" 
    fi 
done 
相關問題