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 ls
comando (puede leer sobre por qué no debería usarlo ls
en scriptsaquí).
Un mejor enfoque es utilizar find
el 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 f
a -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 rename
y 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