Я недавно нашел сценарий для сокрытия файлов на рабочем столе и папок. Следующее является сценарием:
#!/bin/bash
#
cd /home/ramvignesh/Desktop
for f in `ls`; do
mv "$f" ".$f"
done
Сценарий не работает правильно. Это не скрывает файлы, названные с пробелами в них. Например, Если у меня есть файл под названием 'Документ без названия', я получаю следующие ошибки...
mv: cannot stat ‘Untitled’: No such file or directory
mv: cannot stat ‘Document’: No such file or directory
Сообщите мне, почему сценарий ведет себя таким способом. Кто-либо может исправить сценарий для меня?Заранее спасибо.
Сценарий, который Вы нашли, испорчен с парсингом вывода ls
команда (можно читать о том, почему Вы не должны использовать ls
в сценариях здесь ).
А лучший подход должен использовать find
команда и передать свой вывод по каналу к xargs
.
С тех пор в исходном сценарии Вы воздействуете на файлы, которые находятся в определенном каталоге, я адаптировал команду соответственно. Перейдите к каталогу, где Вы хотите скрыть файлы и выполнить рев части:
find . -maxdepth 1 -type f ! -name ".*" -printf "%f\0" | xargs -0 -I file mv file .file
Вот маленькая демонстрация в моем корневом каталоге. Я создаю 3 файла и использование выше команды для сокрытия их.
$ 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
вышеупомянутые работы для файлов. Заставить его работать на каталоги, просто измениться -type f
на -type d
.
Демонстрация:
$ 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/
Используя rename
и немного сценария с именем hide_desktop_files
.
#!/bin/bash
dir="$PWD"
cd ~/Desktop
rename 's/(.*)/.$1/' *
cd "$dir"
<час> Пример
% 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