![输入要复制的文件和目录的列表,同上](https://linux22.com/image/42949/%E8%BE%93%E5%85%A5%E8%A6%81%E5%A4%8D%E5%88%B6%E7%9A%84%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95%E7%9A%84%E5%88%97%E8%A1%A8%EF%BC%8C%E5%90%8C%E4%B8%8A.png)
我有一个简短的文件和目录列表,我想在 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