Umbenennen und Verschieben verschachtelter Dateien im Bash-Skript

Umbenennen und Verschieben verschachtelter Dateien im Bash-Skript

Ich habe ein Verzeichnis usersvoller Ordner, die nach den einzelnen Benutzern benannt sind. In diesen Ordnern befindet sich eine Datei namens , userinfo.csvdie ich aus dem Ordner in ziehen möchte users. Da jede Datei im Benutzerordner userInfo heißt, möchte ich sie umbenennen, sodass sie den Benutzernamen enthält, der sich im Ordner befindet. Ich habe Folgendes versucht, aber es funktioniert nicht, da der Benutzername in $dirdas vollständige Verzeichnis ist. Ich bin nicht so sehr darauf bedacht, es in den Benutzernamen umzubenennen, ich muss es nur irgendwie umbenennen, damit usersich beim Verschieben in nicht nur eine Datei und eine Reihe von Fehlern habe.

Wie kann ich das verbessern?

# for every subdirectory, copy userinfo.csv to /users and rename to avoid confusion/errors
for dir in /path/to/users/*/; do
    (
        cd "$dir" && cp userinfo.csv _$("dir").csv && cp _$("dir").csv /path/to/users/
    )
done

Antwort1

Wenn Sie den Benutzernamen im endgültigen Dateinamen nicht benötigen,

for i in /path/to/users/*/userinfo.csv ; do
  mv $i /path/to/users/userinfo-$RANDOM.csv
done

funktioniert das für Ihren Anwendungsfall?

Wenn nicht, können Sie auch die Parameterersetzung von Bash verwenden:

for i in /path/to/users/*/userinfo.csv ; do
  mv $i /path/to/users/${i//\/-}
done

Dadurch wird alles /durch -in der Variable $i(Pfad+Dateiname) ersetzt. Sie erhalten also beispielsweise:

/path/to/users/path-to-users-john-userinfo.csv
/path/to/users/path-to-users-jack-userinfo.csv

Antwort2

for i in $(ls -1 /path/to/users/); do
    mv /path/to/users/$i/*/userinfo.csv /path/to/users/userinfo_$i.csv
done

Dies funktioniert, vorausgesetzt, der userinfo.csvSpeicherort ist /path/to/users/$user/userinfo.csv. In Fällen, in denen /path/to/users/Ordner keine userinfo.csvoder nur Dateien enthalten sind, mvgeschieht nichts und kann daher ignoriert werden.

In $idiesem Fall enthält es den Namen jedes Elements, /path/to/users/sei es eine Datei oder ein Ordner.

verwandte Informationen