我有一个简短的文件和目录列表,我想在 bash shell 中使用同上来制作其中的平面副本。大约有 8-10 个文件和/或目录需要复制。我知道我可以创建一系列条件语句,例如:
if [ -d ~/Documents ];
then
ditto ~/Documents ~/BACKUP/Documents
echo "Documents copied successfully."
else
echo "WARNING: No documents were copied, directory does not exist in expected location."
fi
但是,我很好奇是否有一种风格上更好或更有效的方法来完成这项任务?我考虑过的另一种方法是创建一个保存文件/目录的数组,然后使用循环在数组中移动以复制每个文件。想法?有想法吗?见解?最佳实践?
答案1
您可以对要备份的目录进行循环。请注意使用变量err
来跟踪任何错误。
err=0
for d in ~/Documents ~/Pictures ~/Videos; do
if [ -d "$d" ]; then
ditto "$d" ~/BACKUP/"${d##*/}" || err=1
else
echo 1>&2 "Missing directory: $d"
err=1
fi
done
exit $err
或者,您可以创建一个函数来处理一个目录并多次调用它。注意再次的使用err
。
backup () {
if [ -d "$1" ]; then
ditto "$1" "$2" || err=1
else
echo 1>&2 "Missing directory: $1"
err=1
fi
}
err=0
backup ~/Documents ~/BACKUPS/Documents
backup ~/Pictures ~/BACKUPS/Pictures
backup ~/Videos ~/BACKUPS/Videos