Das macht, was ich brauche
find ./ -name "cleanup.log-*" | xargs -I '{}' sh -c 'mv "$1" $(echo {} | cut -d"-" -f-2)' - {}
Das schwierige Bit war das Konvertieren der xargs-Ersatzzeichenfolge -I {}
in Argumente für den Befehl xargs sh -c ...
.
Ich tat dies, indem ich -
am Ende des Befehls vor dem Ersetzungsstring ein Argument ohne Option setzte {}
.
Also mein Befehl an xargs ist der folgende.
sh -c 'mv "$1" $(echo {} | cut -d"-" -f-2)' - {}
Ich habe damit getestet, was ich wollte, bevor ich den Move-Befehl ausführte
find ./ -name "upload.log-*" | xargs -I '{}' sh -c 'echo "$1" $(echo {} | cut -d"-" -f-2)' - {}
Ich fand diese Seite hilfreich, um zu verstehen, wie man dieses Problem löst