Script para ocultar archivos

Script para ocultar archivos

Recientemente encontré un script para ocultar archivos y carpetas del escritorio. El siguiente es el guión:

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

El guión no funciona correctamente. No oculta los archivos nombrados con espacios. Por ejemplo, si tengo un archivo llamado "Documento sin título", obtengo los siguientes errores. . .

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

Déjeme saber por qué el script se comporta de esa manera. ¿Alguien puede corregirme el guión? Gracias de antemano.

Respuesta1

El script que encontró tiene fallas al analizar la salida del lscomando (puede leer sobre por qué no debería usarlo lsen scriptsaquí).

Un mejor enfoque es utilizar findel comando y canalizar su salida a xargs.

Dado que en el script original operas con los archivos que están en un directorio específico, he adaptado el comando en consecuencia. Navegue hasta el directorio donde desea ocultar los archivos y ejecute la siguiente parte:

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

Aquí hay una pequeña demostración en mi directorio de inicio. Creo 3 archivos y uso el comando anterior para ocultarlos.

$ 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

Lo anterior funciona para archivos. Para que funcione para directorios, simplemente cambie -type fa -type d.

Manifestación:

$ 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/

Respuesta2

Usando renamey un pequeño script con el nombre hide_desktop_files.

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

Ejemplo

% 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

información relacionada