归档时排除空文件和隐藏文件

归档时排除空文件和隐藏文件

我需要使用创建目录的存档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 {} \;

唯一的问题是不会包含空目录,但我认为某处有一些解决方法......

相关内容