Script para esconder arquivos

4

Recentemente, encontrei um script para ocultar arquivos e pastas da área de trabalho. O seguinte é o script:

#!/bin/bash
#
cd /home/ramvignesh/Desktop
for f in 'ls'; do
mv "$f" ".$f"
done

O script não está funcionando corretamente. Não está escondendo os arquivos nomeados com espaços neles. Por exemplo, se eu tiver um arquivo chamado 'Untitled Document', recebo os seguintes erros. . .

mv: cannot stat ‘Untitled’: No such file or directory
mv: cannot stat ‘Document’: No such file or directory

Por favor, deixe-me saber porque o script se comporta de tal maneira. Alguém pode corrigir o roteiro para mim? Agradecemos antecipadamente.

    
por Ramvignesh 28.09.2014 / 08:09

2 respostas

2

O script que você encontrou é defeituoso com a análise de saída do comando ls (você pode ler sobre por que você não deve usar ls no script aqui ).

Uma abordagem melhor é usar o comando find e canalizar sua saída para xargs .

Como no script original você opera nos arquivos que estão em um diretório específico, adaptei o comando de acordo. Navegue até o diretório onde você deseja ocultar os arquivos e execute a parte abaixo:

find . -maxdepth 1 -type f ! -name ".*" -printf "%f-type f" | xargs -0 -I file mv file .file

Aqui está uma pequena demonstração no meu diretório pessoal. Eu crio 3 arquivos e uso o comando acima para escondê-los.

$ touch file1 file2 file3


$ find . -maxdepth 1 -type f ! -name  ".*" -printf "%f
$ ls
dirone/  dirthree/  dirtwo/


$ find . -maxdepth 1 -type d ! -name  ".*" -printf "%f
$ touch file1 file2 file3


$ find . -maxdepth 1 -type f ! -name  ".*" -printf "%f
$ ls
dirone/  dirthree/  dirtwo/


$ find . -maxdepth 1 -type d ! -name  ".*" -printf "%f%pre%" | xargs -0 -I file mv file .file                                                           


$ ls


$ ls -a
./  ../  .dirone/  .dirthree/  .dirtwo/
" | xargs -0 -I file mv file .file $ ls -a ./ .bash_logout Desktop/ .file1 .gnupg/ .macromedia/ Pictures/ .ssh/ .xsession-errors ../ .bashrc .dmrc .file2 .ICEauthority .mkshrc .profile Templates/ .xsession-errors.old .adobe/ .cache/ Documents/ .file3 .lesshst .mozilla/ .psensor/ Videos/ .bash_history .config/ Downloads/ .gconf/ .local/ Music/ Public/ .Xauthority
" | xargs -0 -I file mv file .file $ ls $ ls -a ./ ../ .dirone/ .dirthree/ .dirtwo/
" | xargs -0 -I file mv file .file $ ls -a ./ .bash_logout Desktop/ .file1 .gnupg/ .macromedia/ Pictures/ .ssh/ .xsession-errors ../ .bashrc .dmrc .file2 .ICEauthority .mkshrc .profile Templates/ .xsession-errors.old .adobe/ .cache/ Documents/ .file3 .lesshst .mozilla/ .psensor/ Videos/ .bash_history .config/ Downloads/ .gconf/ .local/ Music/ Public/ .Xauthority

O acima funciona para arquivos. Para que funcione para diretórios, basta alterar -type d para %code% .

Demo:

%pre%     
por Sergiy Kolodyazhnyy 15.08.2015 / 22:06
0

Usando rename e um pequeno script com o nome hide_desktop_files .

#!/bin/bash
dir="$PWD"
cd ~/Desktop
rename 's/(.*)/.$1/' *
cd "$dir"

Exemplo

% ls -ogla ~/Desktop
total 92
drwxr-xr-x   3  4096 Aug 15 20:45 .
drwxr-xr-x 236 86016 Aug 15 20:46 ..
-rw-rw-r--   1     0 Aug 15 20:45 bar
-rw-rw-r--   1     0 Aug 15 20:45 foo
drwxrwxr-x   2  4096 Aug 15 20:45 .foo

% ./hide_desktop_files                
rename(bar, .bar)
foo not renamed: .foo already exists

% ls -ogla ~/Desktop
total 92
drwxr-xr-x   3  4096 Aug 15 20:45 .
drwxr-xr-x 236 86016 Aug 15 20:47 ..
-rw-rw-r--   1     0 Aug 15 20:45 bar
-rw-rw-r--   1     0 Aug 15 20:45 foo
drwxrwxr-x   2  4096 Aug 15 20:45 .foo
    
por A.B. 15.08.2015 / 20:48

Tags