我需要递归压缩目录路径及其子文件夹中的单个文件本身,而无需压缩文件夹或目录。我还需要排除某些文件类型(不止一种)。
如何在 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