我正在尝试创建一个脚本,该脚本可以将多个目录中具有特定扩展名的文件压缩为单个 tar 球。目前我在脚本文件中的内容是:
find "$rootDir" -name '*doc' -exec tar rvf docs.tar {} \;
Run Code Online (Sandbox Code Playgroud)
$rootDir搜索的基本路径在哪里。
这很好,除了 tar 文件中的路径是绝对的。我更喜欢路径相对于$rootDir. 我该怎么做呢?
当前的实施例tar -tf docs.tar,其中$rootDir是/home/username/test输出:
home/username/test/subdir/test.doc
home/username/test/second.doc
Run Code Online (Sandbox Code Playgroud)
我希望输出是什么:
./subdir/test.doc
./second.doc
Run Code Online (Sandbox Code Playgroud) 根据此页面,可以让 tar 创建一个 tar 存档“拆分”为 100 Mb 的文件:
tar -c -M --tape-length=102400 --file=disk1.tar largefile.tgz
Run Code Online (Sandbox Code Playgroud)
问题是这个命令会要求你在第一个文件被填满后以交互方式为下一个文件提供一个新的文件名。
有人知道跳过这个交互步骤的方法,让 tar 自动进行“拆分”吗?
目前,tar -zcf arch.tgz files/*以 UTF 编码文件名,因此 Windows 用户会看到文件名中损坏的所有字符,这些字符不是 english,并且无法使用它。
zip -qq -r arch.zip files/* 具有相同的行为。
如何创建 zip / tgz 存档,以便当 Windows 用户解压缩它时,所有文件名都会正确编码?
我正在编写一个练习 bash 脚本,它将文件夹保存为 tar 存档,名称为 date-foldername.bak
当未格式化的日期作为文件名的一部分插入时,脚本会失败,所以2022-05-09-work没问题,但默认的日期输出Mon 9 May 18:24:36 BST 2022将产生:
tar: Cannot connect to Mon 9 May 18: resolve failed
Run Code Online (Sandbox Code Playgroud)
在这种情况下“解决失败”是什么意思?
这是代码:
#!/bin/bash
# Scrit accepts a folder name to back up as an parameter
# It saves the folder as a tar archive with the name date-foldername.bak
echo "Beginning backup."
d=$(date)
echo "Today's date is $d"
tar --create --verbose --file="$d-$1.bak" "$1"
echo "Backup complete."
Run Code Online (Sandbox Code Playgroud) 我想创建一个 tar 文件,其中所有目录和文件都按字母顺序处理。这是针对正在压缩的整个目录层次结构,因此它将首先按字母顺序处理第一个目录,然后按字母顺序处理其中的子目录,等等。我翻阅了手册页,找不到此开关。
我承认,这一半是新奇,一半是轻微优化。我简直不敢相信没有简单的方法可以做到这一点。我肯定错过了什么。
我正在尝试创建一个脚本,以从包含多种文件的存档中仅提取 jpeg 图片。
为此,我尝试使用:
tar -xf MyTar.tar *.jpg
Run Code Online (Sandbox Code Playgroud)
但它失败了(找不到*.jpg)并建议我使用“--wildcard”。所以我试过了
tar -xf MyTar.tar --wildcard *.jpg
Run Code Online (Sandbox Code Playgroud)
我这样做了,但是同样的错误和不同的警告对我说选项“--wildcard”不明确。
我已经浏览了 tar 的手册页,但没有找到有关该问题的线索。
我有一个糟糕的备份脚本,包括一个不需要的文件。.tar.gz 备份文件有 5gig 大,我想获取存档中每个文件及其大小的列表。
那可能吗 ?你会怎么做?
我对使用 git 很陌生,想知道是否可以使用常见的 UNIX 命令(如cp或tar/ untag)复制 Git 存储库,而不是通过git clone.
我的情况是,我有一个生产环境(python 虚拟),其中一些代码在 git 中检出。我想知道从 git 的角度来看,使用 atar或其他东西复制整个环境是否是一个坏主意。这种方法对于快速复制代码库/环境很方便。
我担心的是,如果存在两个工作副本,其中一个是从另一个文件系统复制的,则 git clone 可能会将某些唯一 ID 与工作副本相关联,这可能会导致冲突。
我可以使用 tar 命令更改目录并使用通配符文件模式吗?
这是我想要做的:
tar -cf example.tar -C /path/to/file *.xml
Run Code Online (Sandbox Code Playgroud)
如果我不更改目录 (-C),它会起作用,但我正在尝试避免 tar 文件中的绝对路径。
tar -cf example.tar /path/to/file/*.xml
Run Code Online (Sandbox Code Playgroud)
以下是我所做的其他一些尝试:
tar -cf example.tar -C /path/to/file *.xml
tar -cf example.tar -C /path/to/file/ *.xml
tar -cf example.tar -C /path/to/file/ ./*.xml
tar -cf example.tar -C /path/to/file "*.xml"
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
tar: *.xml: Cannot stat: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我知道还有其他方法可以使这项工作(使用 find、xargs 等),但我希望仅使用 tar 命令来完成此操作。
有任何想法吗?