Se você quiser arquivar os arquivos não ocultos (de qualquer tipo, incluindo o diretório) modificados pela última vez em setembro de qualquer ano e cujo nome contenha oim_server
(que parece ser a intenção de seu comando ll | grep 'Sep' | grep 'oim_server'
) um também corresponderia ao destino user / group / filename / symlink contendo Sep
ou oim_server
), em um sistema GNU, você poderia fazer:
find . -mindepth 1 -maxdepth 1 ! -name '.*' \
-name '*oim_server*' -printf '%Tm:%pll | grep Sep | grep oim_server |
awk '{print $NF}' |
tar --no-recursion -T - -cvvf - |
xz > file.tar.xz
' |
sed -zn 's/^09://p' |
tar --null --no-recursion -T - -cvvf - |
xz > file.tar.xz
( --no-recursion
sendo não também arquiva o conteúdo desses diretórios modificados pela última vez em algum mês de setembro).
Observe que tar
não é compactado, apenas arquiva (agrupa arquivos com dados e metadados juntos em uma fita ou arquivo para que possam ser restaurados como é mais tarde). Você canaliza sua saída para um compressor como xz
acima para obter um archive compactado. Algumas implementações de tar
, como o GNU tar
, podem chamar esses compressores sozinhos ( -J
/ --xz
para xz
de compactação nas versões recentes do GNU tar
).
Se você quisesse arquivar os arquivos exibidos na saída de seu ls
filtrado, você faria:
ll | awk '/Sep/ && /oim_server/ {print $NF}' |
tar --no-recursion -T - -cvvf - |
xz > file.tar.xz
Que você pode simplificar para:
find . -mindepth 1 -maxdepth 1 ! -name '.*' \
-name '*oim_server*' -printf '%Tm:%pll | grep Sep | grep oim_server |
awk '{print $NF}' |
tar --no-recursion -T - -cvvf - |
xz > file.tar.xz
' |
sed -zn 's/^09://p' |
tar --null --no-recursion -T - -cvvf - |
xz > file.tar.xz
No entanto, observe que há algumas limitações:
- O
grep Sep
pesquisa Sep
na linha inteira, não apenas no campo do mês. Isso inclui o nome do usuário e do grupo, o nome do arquivo e o destino dos links simbólicos.
-
Sep
será usado para arquivos modificados pela última vez em setembro somente em algumas localidades em inglês.
- como para
Sep
acima do oim_server
encontrado em qualquer lugar da linha
- os nomes de arquivos podem conter caracteres de nova linha, portanto, supondo que um nome de arquivo esteja apenas em uma linha, está errado no caso geral.
- pior,
awk '{print $NF}'
imprime a última palavra de cada linha. Isso significa que não funcionará para nomes de arquivos contendo espaços em branco ou para links simbólicos (onde será gerada a última palavra do destino do symlink)