Linux-Skript zum Verschieben von Dateien aus mehreren Verzeichnissen

Linux-Skript zum Verschieben von Dateien aus mehreren Verzeichnissen

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/directory1werden verschoben in/home/userA/directory1/directory2

Ich muss dies für alle usersdarunter wiederholen /homeund den Benutzer überspringen, wenn er directory2nicht 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 d1und 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 d1einige Leerzeichen vorhanden sind, müssen Sie etwas mehr Übung machen und diese mit einem schützen \(damit Sie schreiben können for 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.

verwandte Informationen