我必须对文件夹(例如文件夹 A)中的所有文件进行压缩,该文件夹具有多个文件夹层次结构,每个文件夹中都包含文件。此文件夹 A 存在于目录中的数千个文件夹中。我需要对所有文件夹中的所有文件进行压缩。我正在尝试以下命令:
gunzip -r path/to/Folder/*/Folder_A/
我收到此错误:Argument list to long
。
请帮助我使用命令来压缩文件。
答案1
for folder in path/to/Folder/*/Folder_A/; do gunzip -r "$folder"; done
我没有测试它,但这应该可以解决问题。 Bash 正在扩展path/to/Folder/*/Folder_A/
到多个目录,因此命令变成了,gunzip -r path/to/Folder/1/Folder_A/ path/to/Folder/2/Folder_A/ path/to/Folder/3/Folder_A/ # and so on
但gunzip 显然不接受您的“数千”参数。上面的循环扩展了*
第一个循环,并为每个循环创建了一个新的gunzip命令。
如果 for 循环不起作用,您可以使用 find 尝试:
find /path/to/Folder -name Folder_A -type d -print0 | \
while read -d $'\0' folder; \
do \
gunzip -r "$folder" \
done
*
(如果-directories 使用特殊字符或空格,两种解决方案都可能不起作用)