Wie benennt man eine Datei mit bekanntem Namen in einen neuen Namen um, der in einer Variablen gespeichert ist?

Wie benennt man eine Datei mit bekanntem Namen in einen neuen Namen um, der in einer Variablen gespeichert ist?

[UPDATE-1]:Wenn möglich, geben Sie mir Nachteile als Motivation, um die einfachsten Befehle zu lernen.


Ich habe also eine Datei im Verzeichnis:

ls | grep *.mp4 

video.mp4

Ich verwende diesen Befehl, um Dateien nach dem Zufallsprinzip umzubenennen und in ein anderes Verzeichnis zu verschieben:

for a in *.mp4; do mv -n "$a" "${a/*/$RANDOM.mp4}"; done;  mv *.mp4 /home/misdeed/Documents

Ist ok, ich bekomme einen zufälligen Namen für video.mp4

cd Documents; ls | grep *.mp4

19889.mp4

Frage:

Anwendung:

a="This is name file"
echo $a

Dies ist der Dateiname

zum Umbenennen von *.mp4 (nicht zufällig) und zum Abrufen

Dies ist der Name file.mp4


Ich brauche so etwas:

  • a="This is name file"
  • COMMAND FOR RENAME BUT WITHOUT $RANDOM. I WANT USE $a in renamed file

Antwort1

Nehmen wir an, der ursprüngliche Name ist im Voraus bekannt und lautet video.mp4. Sie benennen es mit

mv video.mp4 "$a".mp4

Anmerkungen:

  • Wenn die Variable leer (oder nicht gesetzt) ​​ist, lautet der endgültige Name .mp4. Namen, die mit einem Punkt ( .) beginnen, sind „versteckt“, lssie werden einfach übersprungen, Sie müssen ls -asie sehen.
  • Wenn bereits eine Datei mit dem Zielnamen vorhanden ist, geht diese verloren und die vorherige video.mp4Datei übernimmt ihren Namen. Um Missgeschicke zu vermeiden, beachten Sie mv -i; es wird eine Bestätigungsaufforderung angezeigt, wenn der Zielpfad existiert.

Antwort2

Ich nehme an, Sie möchten den neuen zufälligen Dateinamen drucken? In diesem Fall ist es am einfachsten, den Wert Ihrer Zufallsvariablen wiederzuverwenden.

for file in *.mp4; do
  RANDOM_NAME="${file/*/$RANDOM.mp4}";
  mv -n "$file" /home/misdeed/Documents/"$RANDOM_NAME";
  echo "This is name $RANDOM_NAME.mp4";
done

verwandte Informationen