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

iva*_*a14 0 linux bash shell-script

我需要tar 在 shell 脚本中使用创建一个目录存档,但我也应该排除隐藏文件和大小等于0. 此外,第一个命令行参数是应该创建的档案的位置,第二个是档案的名称,第三个是应该存档其文件的目录的路径。

我尝试在终端中发送这样的参数:

/bin/bash ss1 /home/user arch /home/user/folder
Run Code Online (Sandbox Code Playgroud)

但它给了我一些 tar 错误。我试着像这样存档:

tar -cvf --exclude=.* $1/$2 $3 
Run Code Online (Sandbox Code Playgroud)

但这不正确,我不确定正确的语法是什么,以及如何排除空文件和隐藏文件。

Sat*_*ura 7

既然你标记了这个,linux我就假设你有 GNUfind和 GNU tar

如果您的文件名没有嵌入换行符并且您不想存档空目录:

find "$3" -type f \! -empty \! -name '.*' | tar cvf "$1/$2" -T -
Run Code Online (Sandbox Code Playgroud)

find找到相关文件,并-T -告诉tar读取要从中存档的文件列表stdin

细化这个,如果你想包括空目录:

find "$3" \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) | \
    tar cvf "$1/$2" -T -
Run Code Online (Sandbox Code Playgroud)

如果你想处理的文件名与嵌入式换行符:

find "$3" \( \( -type d -empty \) -o \( -type f \! -empty \! -name '.*' \) \) -print0 | \
    tar cvf "$1/$2" --null -T -
Run Code Online (Sandbox Code Playgroud)