下面是我编写的 shell 脚本,用于自动执行将特定 Vue 项目复制到 Windows 11 计算机上的另一个位置的任务:
# declare and initialize variables
source="/z/files/development/vue/code/project17"
target="/c/users/knot22/desktop/temp_dev"
# display contents of variables to user; ask user whether or not to proceed; act accordingly
echo -e "\nCopy from: ${source}"
echo -e "Copy to: ${target}\n"
read -p "Proceed? (y/n) " proceed
echo
if [[ ${proceed^^} == Y ]]; then
IFS='/' read -ra PARTS <<< "${source#/}" # split $source string, without leading /, into array called PARTS using / as delimiter
arrayLength="${#PARTS[@]}"
tar -c --exclude="node_modules" -C / "${source#/}" | tar -x -C "/${target#/}" --strip-components="$(($arrayLength - 1))"
echo -e "Copy operation is complete\n"
else
echo -e "Operation aborted\n"
fi
它会将除目录之外的所有内容复制到新位置node_modules
,这正是其预期的行为方式。不过,还有改进空间。.git
源位置中的目录是隐藏的,但当将其复制到目标位置时,隐藏属性不会被带走。有没有办法保留该属性?我搜索了 man tar,但没有找到任何关于保留隐藏属性的内容。
答案1
Tar 不支持“隐藏”文件系统属性。43tar
年前创建,用于将 Unix 系统备份到磁带(吨猿应收账chive)。Unix 上的隐藏文件是文件名以 开头的文件.
,因此 Unix 文件系统(或实用程序)无需支持此类标志。
Tar 甚至没有支持此功能的元数据字段。事实上,GNU tar 甚至不支持 Linux 风格的 acl。
正如所述维基百科:
另外,您可以使用attrib
Windows 实用程序在复制后设置隐藏属性。它似乎还rsync
支持隐藏文件(我自己还没有确认)。rsync
无论如何,使用似乎是一个更好的主意,因为它是为复制复杂的目录结构而创建的。