我正在执行cron作业,以根据需要检查和恢复方舟文件。我需要获得.ark文件的最大文件大小,如果.TheIsland.ark文件较小,它将自动备份并复制到最大大小。现在,当我在crontab进行此操作时,脚本的一部分会失败。
哪个是:
actualmap=$(find $PWD -type f -printf '%p\n' -name "*.ark"| sort -nr | head -1)
如果我删除\ n,它实际上可以工作,但是由于它们不在单独的行中,因此无法在它们之间进行排序。
我在\ n进行cron作业的输出是:
/srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/recovery.sh (which is the recovery script)
在终端中运行的同一行代码会产生以下正确输出:
/srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/SavedArks/TheIsland_NewLaunchBackup.bak
没有使用crontab的\ n,我得到:
/srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/SavedArks/TheIsland_27.06.2019_21.46.20.ark/srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/SavedArks/TheIsland_28.06.2019_15.15.34.ark
我已经附上了可以手动运行的完整代码。
#!/bin/bash
export DISPLAY=:0.0
##ARK Map Recovery Script
cd /srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/SavedArks
#Check file size of current ark map
file=TheIsland.ark
echo $file
currentsize=$(wc -c <"$file")
echo $currentsize
#Find biggest map file.
actualmap=$(find $PWD -type f -printf '%p\n' -name "*.ark"| sort -nr | head -1)>/srv/daemon-data/da4aaa1b-0ce9-46d2-bd60-5f599cc089ae/ShooterGame/Saved/SavedArks/log.txt
echo $PWD
echo $actualmap
biggestsize=$(wc -c < "$actualmap")
echo $biggestsize
if [ $currentsize -ge $biggestsize ]; then
echo No map recovery required as over $biggestsize bytes
else
echo Uh Oh! size is under $biggestsize bytes Attempting map recovery
echo Checking for Backup dir and creating if necessary
mkdir -p BackupFiles
#Move old map into backup dir in the saved location
echo Moving old Map File to backup dir
mv $file BackupFiles
#Stop server using docker commands
echo Stopping servers
docker kill da4aaa1b-0ce9-46d2-bd60-5f599cc089ae
#Copy biggest map file with correct name
echo Copying backup file
cp $actualmap $file
fi
答案 0 :(得分:1)
此处不需要在-printf
命令中使用find
选项。 -print
就可以了。
我通过以下方法获得所需的结果(发现返回找到的文件名,每行一个):
find $PWD -type f -name "*.ark" -print.
通过-printf
,%p
始终为您提供文件名。
来自man find
:-print True; 在标准输出上打印完整的文件名,然后换行。
选项-print
已完成您想要的操作。