Ich versuche ein Skript zu erstellen, um Dateien, sobald sie in einem Verzeichnis abgelegt sind, in ein Unterverzeichnis zu verschieben.
Beispiel:
In abgelegte Dateien /home/userA/directory1
werden verschoben in/home/userA/directory1/directory2
Ich muss dies für alle users
darunter wiederholen /home
und den Benutzer überspringen, wenn er directory2
nicht existiert.
Mein Skript bisher
#!/bin/bash
directory="/home/*/directory1"
directory2="/home/*/directory1/directory2/."
if [ $(ls -1A $directory | wc -l) -gt 0 ] ;
then
find $directory -type f -exec rsync --remove-source-files {} $directory2 \; &>/dev/null ;
fi
Mein Problem mit dem obigen Skript besteht darin, dass es alle Dateien in eine der Dateien verschiebt directory2
.
Antwort1
Ich gehe davon aus, dass im Home-Bereich einiger Ihrer Benutzer ein Verzeichnis namens d1
und darin ein Unterverzeichnis namens vorhanden ist d2
.
Ich nehme an, Sie möchten etwas Ähnliches tun wie
#!/bin/bash
for i in /home/*/d1 ; do
if [ -d "$i/d2" ]; then
# echo "$i/d2"
find "$i" -maxdepth 1 -type f -exec mv {} "$i/d2" \;
fi
done
Notiz:
- Wenn im richtigen Namen
d1
einige Leerzeichen vorhanden sind, müssen Sie etwas mehr Übung machen und diese mit einem schützen\
(damit Sie schreiben könnenfor i in /home/*/directory\ with\ spaces; do
). - Versuchen Sie, in Ihrem vorherigen Skript zu schreiben
echo $directory2 ; exit
, und Sie werden verstehen, warum es sich anders verhält als erwartet. Weitere Informationen zuDateinamenerweiterung.