Se você quiser usar 7z
, a parte complicada parece estar persuadindo a não a recorrer; o parâmetro -r-
indicado pela documentação parece não ser funcional, e a solução sugerida do software author é para excluir subdiretórios com a expressão curinga -x!*/
Então, dado
$ tree Data
Data
├── file1
├── file2
├── Folder1
│ ├── file3
│ └── file4
├── Folder2
│ ├── file5
│ └── file6
└── Folder3
├── file7
└── file8
3 directories, 8 files
então
find Data -type d -execdir sh -c 'cd "" && 7z a "".7z -x!*/ && cd -' sh {} \;
resulta em
$ tree Data
Data
├── Data.7z
├── file1
├── file2
├── Folder1
│ ├── file3
│ ├── file4
│ └── Folder1.7z
├── Folder2
│ ├── file5
│ ├── file6
│ └── Folder2.7z
└── Folder3
├── file7
├── file8
└── Folder3.7z
3 directories, 12 files
onde, por exemplo, podemos verificar que Folder2.7z
contém apenas os arquivos da sua própria pasta usando
$ 7z l Data/Folder2/Folder2.7z
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_CA.UTF-8,Utf16=on,HugeFiles=on,64 bits,2 CPUs Intel(R) Core(TM)2 Duo CPU P9600 @ 2.53GHz (1067A),ASM)
Scanning the drive for archives:
1 file, 128 bytes (1 KiB)
Listing archive: Data/Folder2/Folder2.7z
--
Path = Data/Folder2/Folder2.7z
Type = 7z
Physical Size = 128
Headers Size = 128
Solid = -
Blocks = 0
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2018-02-12 18:37:37 ....A 0 0 file5
2018-02-12 18:37:37 ....A 0 0 file6
------------------- ----- ------------ ------------ ------------------------
2018-02-12 18:37:37 0 0 2 files
Observação: !*/
pode exigir escape adicional em ambientes (como o shell bash interativo), em que !
é um operador de expansão de histórico.