Excluir diretórios vazios Synology NAS Shell

2

Eu tento excluir meus diretórios vazios no meu Synology NAS (DS415 +).

Eu tentei:

find . -type d | xargs rmdir

Mas o problema é que eu tenho directroies com espaços nos nomes como "olá (2012)". E o argumento "-empty" não é suportado nos Kernels da Synology.

Você tem alguma ideia?

    
por Beni 28.07.2015 / 11:48

2 respostas

1

É possível que eu tenha entendido errado você, mas parece que você está trabalhando com um shell POSIX .

Você pode fazer isso com awk ( gawk ). Na medida em que cada diretório vazio contém apenas 2 arquivos por padrão ( . e .. ), você pode usar [ $(wc -l <<< $(ls -as $DIR)) -ne 2 ] como condição de vazio da pasta.

$ find . -type d | awk '{print "[ $(wc -l <<< $(ls -a \"" $i "\")) -eq 2 ] && rm -rf \"" $0 "\""}'

Esta é a saída que saí do diretório testado:

[ $(wc -l <<< $(ls -a ".")) -eq 2 ] && rm -rf "."
[ $(wc -l <<< $(ls -a "./skda  askd ()")) -eq 2 ] && rm -rf "./skda  askd ()"
[ $(wc -l <<< $(ls -a "./skda  askd () 2")) -eq 2 ] && rm -rf "./skda  askd () 2"

Agora tudo que você precisa fazer é canalizar esses comandos para o seu intérprete. No meu diretório de testes, isso funcionou de forma limpa.

    
por 28.07.2015 / 15:04
1

xargs(1) não se divide em espaços, mas em novas linhas.

A menos que você tenha diretórios com novas linhas em seus nomes, isso funcionará.

find . -type d -exec rmdir {} +

  =>  rmdir ./dir1 ./dir1/subdir1 ./dir1/subdir2 ./dir2 ...

Mas excluímos os pais antes dos filhos ... Então, em vez disso, queremos:

find . -depth -type d -exec rmdir {} +

  =>  rmdir ./dir1/subdir1 ./dir1/subdir2 ./dir1 ./dir2 ...
    
por 20.06.2017 / 10:32