我想將所有文件和子目錄從一個目錄複製到另一個目錄。但是,如果它們不在目標目錄中,或者如果源目錄文件上的時間戳比目標目錄上的時間戳更新,我只想複製它們。我有麻煩進入所有的子目錄。我能夠降低一個級別,但不是下一個級別。例如,使用目錄/ a/b/c,我可以到達子目錄b,但不能到達c。我能看到這樣做的唯一方法是使用遞歸函數。我的代碼如下。Linux bash腳本複製目錄和子目錄
#!/bin/bash
SOURCEDIR=/home/kyle/Smaug/csis252
DESTDIR=/home/kyle/Desktop/csis252
copy() {
local DIRECTORY=$1
for FILE in `ls $DIRECTORY`
do
if [ -f $DIRECTORY/$FILE ]
then
echo $FILE file
cp $DIRECTORY/$FILE $DESTDIR/$DIRECTORY/$FILE
fi
if [ -d $FILE ]
then
echo $FILE directory
mkdir $DESTDIR/$DIRECTORY/$FILE
copy $DIRECTORY/$FILE
fi
done
}
cd $SOURCEDIR
copy .
我忘記了第二條if語句中的$ DIRECTORY。我現在覺得很蠢,但有時候只是需要別人閱讀才能找到這樣的東西。我沒有使用cp -r $ SOURCEDIR $ DESTDIR,因爲這會複製所有內容,有時我不想要。我嘗試了cp -ur $ SOURCEDIR $ DESTDIR,但它只會複製新的東西,而不會更新現有的東西。我的代碼的最終版本如下。
#!/bin/bash
SOURCEDIR=/home/kyle/Smaug/csis252
DESTDIR=/home/kyle/Desktop/csis252
copy() {
local DIRECTORY=$1
for FILE in `ls $DIRECTORY`
do
if [ ! -f $DESTDIR/$DIRECTORY/$FILE ] && [ ! -d $DESTDIR/$DIRECTORY/$FILE ]
then
if [ -f $DIRECTORY/$FILE ]
then
echo "$DIRECTORY/$FILE copied"
cp $DIRECTORY/$FILE $DESTDIR/$DIRECTORY/$FILE
fi
if [ -d $DIRECTORY/$FILE ]
then
echo "$DIRECTORY/$FILE directory made"
mkdir $DESTDIR/$DIRECTORY/$FILE
copy $DIRECTORY/$FILE
fi
else
if [ $DESTDIR/$DIRECTORY/$FILE -nt $DIRECTORY/$FILE ] && [ ! -d $DIRECTORY/$FILE ]
then
cp $DIRECTORY/$FILE $DESTDIR/$DIRECTORY/$FILE
echo "$DIRECTORY/$FILE updated"
fi
fi
done
}
cd $SOURCEDIR
copy .