ディレクトリ内のすべてのファイルを移動しますが、最後に変更された/最新のファイルのみをコピーするバックアップスクリプトを作成しようとしています。
find
修正されたファイルをインポートまたはls
リストできず、ファイル名のみを出力することもできないため、正しい最新のファイルを返すことができないという問題があります。だから私のファイルは$latestfile
最終的に別のファイルになります。
助ける?
私の現在のコード:
# Primary Backup Location
BACKUP_LOCATION=/my/backup/dir
# List latest file
latestfile=$(find ${BACKUP_LOCATION} -maxdepth 1 -mindepth 1 -type f -exec basename {} \; | sort -nr | awk "NR==1,NR==1 {print $2}")
echo "Latest file is $latestfile"
# List all (EXCEPT LAST) files and get ready to Backup
echo "Backing up all files except last"
for file in $(find ${BACKUP_LOCATION} -maxdepth 1 -mindepth 1 -type f \! -name "$latestfile" -printf "%f\n" | sort -nr )
do
echo $file
#mv $file /some/target/dir/$file
done
答え1
これを行う方法を学びます。これは私のバックアップスクリプトの一部です。誰かが役に立つと思います。
# Location to Backup from
BACKUP_TARGET="/my/dir/to/backup"
# Location to Backup to
BACKUP_LOCATION="/my/backup/store"
# List latest file
file_latest=$(find ${BACKUP_TARGET} -maxdepth 1 -mindepth 1 -printf '%T+ %p\n' | sort -r | head -n 1 | sed 's|.*/||' )
echo "Latest file is $file_latest"
# List the rest of files
file_rest_of_em=$(find ${BACKUP_TARGET} -maxdepth 1 -mindepth 1 -type f \! -name "$file_latest" | sed 's|.*/||' )
# make newlines the only separator
IFS=$'\n'
# Backup all previous Backups, MOVE ALL
echo "Backing up all files except Latest Backup..."
for file in $file_rest_of_em
do
echo "Moving $file"
mv -n ${BACKUP_TARGET}/$file $BACKUP_LOCATION/
done
# Backup Latest Backup, LEAVE COPY BEHIND
if [ -f "$BACKUP_LOCATION/$file_latest" ]; then
echo "$file_latest (Latest Backup) already exists."
else
echo "$file_latest (Latest Backup) does not exist."
echo "Copying $file_latest..."
cp -n --preserve=all ${BACKUP_TARGET}/$file_latest $BACKUP_LOCATION/
fi
# done with newline shenanegans
unset IFS
助けてくれてありがとう @Panki