Script para ocultar arquivos com extensão específica em pastas recursivamente

1

Eu tenho esta pasta que contém muitas pastas, cada uma contendo muitos arquivos com a estrutura de nomes .XYZ.zip.

Gostaria de renomeá-los (usando o bash) para XYZ.zip (ou seja, para ocultá-los).

Eu vi uma pergunta tentando fazer uma coisa semelhante,

alias deannoy='for annoyingbak in *.bak;do mv "$annoyingbak" ."$annoyingbak";done'>> ~/.bashrc && . .bashrc

mas não consegui mudar, por isso é feito recursivamente para todas as pastas abaixo da pasta atual.

    
por user2413 19.10.2012 / 11:21

3 respostas

2

O comando for ... in *.bak procura apenas o diretório atual.

Você deseja usar o comando find , que pesquisa recursivamente. Este comando localizará todos os arquivos zip começando com um ponto a qualquer profundidade no diretório atual ( . ).

find . -iname '.*.zip'

Remover o ponto inicial é um pouco complicado. O seguinte parece funcionar (mas pode ter casos de borda, caveat emptor).

for f in $(find -iname '.*.zip'); do f2=$(echo $f | sed -re 's/(.*)\/\.(.*)/\//'); echo $f $f2; done

Isso imprimirá todas as operações que ele executaria ( echo $f $f2 ), se essa lista parecer correta, altere-a para mv $f $f2 e ela fará as renomeações.

    
por chronitis 19.10.2012 / 11:36
3

Há uma boa resposta no site da irmã stackoverflow : diz:

#!/bin/bash
recurse() {
 for i in ""/*;do
    if [ -d "$i" ];then
        echo "dir: $i"
        recurse "$i"
    elif [ -f "$i" ]; then
        echo "file: $i"
    fi
 done
}

recurse /path
     

OU se você tiver bash 4.0

#!/bin/bash
shopt -s globstar
for file in /path/**
do
    echo $file
done

Diga obrigado no stackexchange para ghostdog74 se isso funcionar para você. A conta askubuntu também funcionará lá.

    
por turbo 19.10.2012 / 11:31
1

Você pode usar este comando:

$ find foobar/ -type f -iname ".*" -exec rename -n 's/^(.+)\/\.(.+)$/\//' '{}' \;

foobar/sub_dir/moresubdir/.foo bar.zip renamed as foobar/sub_dir/moresubdir/foo bar.zip
foobar/sub_dir/moresubdir/.one.zip renamed as foobar/sub_dir/moresubdir/one.zip
foobar/sub_dir/moresubdir/.two.zip renamed as foobar/sub_dir/moresubdir/two.zip
foobar/sub_dir/.one.zip renamed as foobar/sub_dir/one.zip
foobar/sub_dir/.two.zip renamed as foobar/sub_dir/two.zip
foobar/.foo bar.zip renamed as foobar/foo bar.zip
foobar/.one.zip renamed as foobar/one.zip
foobar/.two.zip renamed as foobar/two.zip

find pesquisará recursivamente por todos os arquivos ocultos e os passará para rename . O -n param faz com que a renomeação execute a regra de substituição para mostrar a você quais arquivos serão renomeados. Se você está feliz com os resultados, remova o parâmetro para que ele renomeie os arquivos para real

    
por Flint 19.10.2012 / 12:20