我需要使用创建目录的存档tar
在 shell 脚本中但我还应该排除隐藏文件和大小等于0
.此外,第一个命令行参数是要创建的存档的位置,第二个是存档的名称,第三个是要存档其文件的目录的路径。
我尝试在终端中发送这样的参数:
/bin/bash ss1 /home/user arch /home/user/folder
但它给了我一些 tar 错误。我尝试像这样存档:
tar -cvf --exclude=.* $1/$2 $3
但这是不正确的,我不确定正确的语法是什么,以及如何排除空文件和隐藏文件。
答案1
既然你标记了这个,linux
我就假设你有 GNUfind
和 GNU tar
。
如果您的文件名没有嵌入换行符并且您不想归档空目录:
find "$3" -type f \! -empty \! -name '.*' | tar cvf "$1/$2" -T -
find
找到相关文件,并-T -
告诉tar
读取要归档的文件列表stdin
。
如果您想包含空目录,请对此进行改进:
find "$3" \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) | \
tar cvf "$1/$2" -T -
如果你还想要处理带有嵌入换行符的文件名:
find "$3" \( \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) \) -print0 | \
tar cvf "$1/$2" --null -T -
答案2
尝试这个:
find test/ -not -iname ".*" -not -empty -exec tar --no-recursion -rvf file.tar {} \;
唯一的问题是不会包含空目录,但我认为某处有一些解决方法......