Skript zum Verstecken von Dateien

Skript zum Verstecken von Dateien

Ich habe kürzlich ein Skript zum Ausblenden von Desktopdateien und -ordnern gefunden. Das folgende Skript lautet:

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

Das Skript funktioniert nicht richtig. Es versteckt die Dateien nicht, deren Namen Leerzeichen enthalten. Wenn ich beispielsweise eine Datei mit dem Namen „Unbenanntes Dokument“ habe, erhalte ich die folgenden Fehler. . .

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

Bitte lassen Sie mich wissen, warum sich das Skript so verhält. Kann jemand das Skript für mich korrigieren? Vielen Dank im Voraus.

Antwort1

Das Skript, das Sie gefunden haben, weist einen Fehler bei der Analyse der lsBefehlsausgabe auf (lesen Sie hier, warum Sie es nicht lsin Skripten verwenden sollten).Hier).

Ein besserer Ansatz besteht darin, den Befehl zu verwenden findund seine Ausgabe an weiterzuleiten xargs.

Da Sie im Originalskript mit den Dateien arbeiten, die sich in einem bestimmten Verzeichnis befinden, habe ich den Befehl entsprechend angepasst. Navigieren Sie zu dem Verzeichnis, in dem Sie die Dateien verstecken möchten, und führen Sie den folgenden Teil aus:

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

Hier ist eine kleine Demo in meinem Home-Verzeichnis. Ich erstelle 3 Dateien und verwende den obigen Befehl, um sie auszublenden.

$ 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

Das oben genannte funktioniert für Dateien. Damit es auch für Verzeichnisse funktioniert, ändern Sie es einfach -type fin -type d.

Demo:

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

Antwort2

Verwenden Sie renameein kleines Skript mit dem Namen hide_desktop_files.

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

Beispiel

% 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

verwandte Informationen