所有目录和子文件夹中的 zip 文件(不包括文件夹本身)

所有目录和子文件夹中的 zip 文件(不包括文件夹本身)

我需要递归压缩目录路径及其子文件夹中的单个文件本身,而无需压缩文件夹或目录。我还需要排除某些文件类型(不止一种)。

如何在 Linux 中使用 ZIP 来实现这一点?

这是修改后的脚本(感谢 Ravexina)。

#!/bin/bash
echo "hello world"
dir=/home/fjaffer/temp
#cd "${dir}"
#cd $(echo $dir | tr -d '\r')
cd "$dir"
find -not -iname '*.txt' -type f | while read -r file_name; \
do zip "$(dir "$file_name")".zip "$file_name" ; done

输出:未找到第 8 行 zip 命令。

答案1

你可以用这样的方法来实现:

find -not -iname '*.mp3' -type f | while read -r file_name; \
do zip "$(realpath "$file_name")".zip "$file_name" ; done

它将对目录中的所有文件(除“mp3”文件外)分别进行压缩。

您也可以排除其他类型的文件,例如 zip 和 mp3 文件:

find -not -iname '*.mp3' -not -iname '*.zip' -type f

所以这个结构:

.
└── a
    ├── 1
    │   └── 1.mp3
    └── 2
        ├── 1.jpg
        ├── 1.mp3
        └── 1.mpv

会成为:

.
└── a
    ├── 1
    │   └── 1.mp3
    └── 2
        ├── 1.jpg
        ├── 1.jpg.zip
        ├── 1.mp3
        ├── 1.mpv
        └── 1.mpv.zip

相关内容