Recentemente encontrei um script para ocultar arquivos e pastas da área de trabalho. O seguinte é o roteiro:
#!/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á ocultando os arquivos nomeados com espaços. Por exemplo, se eu tiver um arquivo chamado 'Documento sem título', 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 por que o script se comporta dessa maneira. Alguém pode corrigir o script para mim? Desde já, obrigado.
Responder1
O script que você encontrou apresenta falhas na análise da saída do ls
comando (você pode ler sobre por que não deve usar ls
em scriptsaqui).
Uma abordagem melhor é usar find
o comando 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 deseja ocultar os arquivos e execute a parte abaixo:
find . -maxdepth 1 -type f ! -name ".*" -printf "%f\0" | xargs -0 -I file mv file .file
Aqui está uma pequena demonstração em meu diretório pessoal. Eu crio 3 arquivos e uso o comando acima para ocultá-los.
$ touch file1 file2 file3
$ find . -maxdepth 1 -type f ! -name ".*" -printf "%f\0" | 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 procedimento acima funciona para arquivos. Para que funcione para diretórios, basta mudar -type f
para -type d
.
Demonstração:
$ ls
dirone/ dirthree/ dirtwo/
$ find . -maxdepth 1 -type d ! -name ".*" -printf "%f\0" | xargs -0 -I file mv file .file
$ ls
$ ls -a
./ ../ .dirone/ .dirthree/ .dirtwo/
Responder2
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