输入要复制的文件和目录的列表,同上

输入要复制的文件和目录的列表,同上

我有一个简短的文件和目录列表,我想在 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

관련 정보