12 linux shell command-line gzip
我需要单独 gzip 目录中的所有文件,包括子目录中的所有文件,之后不删除原始文件。所以假设我有 index.html,我想在最后有 index.html.gzip 和 index.html。
我可以通过 gzip 压缩我目录中的所有文件
gzip -r .
Run Code Online (Sandbox Code Playgroud)
但我也想保留原始文件。
这可能吗?
find . -type f | \
while read -r x
do
gzip -c "$x" > "$x.gz"
done
Run Code Online (Sandbox Code Playgroud)
该-c推结果到stdout,并保持原来的孤单。缺点是您需要自己查找文件。对于更复杂的遍历,您可以使用find(1),但是,像上面一样:.从当前目录开始搜索,并-type f返回每个常规文件的名称。
小智 5
find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;
Run Code Online (Sandbox Code Playgroud)
您可以轻松地切换它以包含您想要压缩的内容(-name '*.txt -or -name '*.html等),而不是像现在这样,排除一些文件(已压缩、备份和临时文件)。
处理文件名中的空格也很好。
更改gzip为 echo gzip进行测试。或者一起跳过 -exec 部分。
编辑:哦,我忘了提到这不会检查是否<target>.gz已经存在。这可能是也可能不是问题。
编辑 2:好的,我们开始检查现有文件。如果这可能是想要的。恕我孤陋寡闻。
while read file; do if [ ! -f "$file.gz" ]; then echo "Compressing $file"; gzip -c "$file" > "$file.gz"; else echo "Not overwriting $file.gz"; fi done < <(find . -type f -not \( -name '*.gz' -or -name '*[~#]' \))
Run Code Online (Sandbox Code Playgroud)
我的find-foo 可能不是它本来的样子,很可能直接在 find 中跳过。
| 归档时间: |
|
| 查看次数: |
14134 次 |
| 最近记录: |