我在成功执行的 bash 脚本中有这个非常简单的行(即生成_data.tar
文件),除了它不排除它通过--exclude
选项被告知排除的子目录:
/bin/tar -cf /home/_data.tar --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*' /data
Run Code Online (Sandbox Code Playgroud)
相反,它生成一个_data.tar
包含 /data 下所有内容的文件,包括我想排除的子目录中的文件。
知道为什么吗?以及如何解决这个问题?
更新我根据下面第一个答案中提供的链接实现了我的观察(首先是顶级目录,最后排除后没有空格):
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*'
Run Code Online (Sandbox Code Playgroud)
但这没有帮助。所有“排除的”子目录都存在于结果_data.tar
文件中。
这令人费解。无论这是当前 tar(GNU tar 1.23,在 CentOS 6.2,Linux 2.6.32 上)中的错误,还是 tar 对空格和其他容易错过的错别字“极度敏感”,我都认为这是一个错误。目前。
这太可怕了:我尝试了下面建议的见解(没有尾随/*
),但它在生产脚本中仍然不起作用:
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1' --exclude='/data/sub2' --exclude='/data/sub3' --exclude='/data/sub4'
Run Code Online (Sandbox Code Playgroud)
除了引号和 2 个空格而不是 1 个空格之外,我看不出我尝试过的和@Richard Perrin 尝试过的有任何区别。我要试试这个(必须等待每晚脚本作为要支持的目录运行) up 是巨大的)并报告。
/bin/tar -cf /home/_data.tar /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4
Run Code Online (Sandbox Code Playgroud)
我开始认为所有这些tar --exclude …
我有一个 16GB 的 USB 闪存驱动器,不知何故损坏到甚至fdisk -l
找不到它的地步(我收到一条单行错误消息:“无法打开 /dev/sdc ”)
但是,它正在附加,被分配/dev/sdc
为 dmesg 显示:
usb 1-7: new high speed USB device using ehci_hcd and address 69
usb 1-7: New USB device found, idVendor=048d, idProduct=1167
usb 1-7: New USB device strings: Mfr=0, Product=0, SerialNumber=0
usb 1-7: configuration #1 chosen from 1 choice
scsi68 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 69
usb-storage: waiting for device to settle before scanning
usb-storage: device scan complete
scsi …
Run Code Online (Sandbox Code Playgroud) 我可能只能编写一个 shell 脚本来查找文件,然后将列表传递给 tar,但我想知道 tar 中是否已经有一个内置功能允许在单个命令行中执行此操作?
例如,我找到了--no-recursion
开关,但是当我这样做时:
tar --no-recursion -cvf mydir.tar mydir
Run Code Online (Sandbox Code Playgroud)
它只归档目录中条目的名称(包括子目录!),但不归档任何文件。
我也试过:
tar --no-recursion -cvf mydir.tar mydir/*
Run Code Online (Sandbox Code Playgroud)
但是,虽然它只存档文件,但它也存档子目录的名称。
有没有办法只告诉 tar 文件,没有目录?