Wie wäre es mit diesem Einzeiler (in bash):
mkdir --parents ./some/path/; mv yourfile.txt $_
Aufschlüsselung:
mkdir --parents ./some/path
erstellt das Verzeichnis (einschließlich aller Zwischenverzeichnisse), danach:
mv yourfile.txt $_
verschiebt die Datei in dieses Verzeichnis ($_ wird zum letzten Argument erweitert, das an den vorherigen Shell-Befehl übergeben wurde, dh:das neu erstellte Verzeichnis).
Ich bin mir nicht sicher, inwieweit dies in anderen Shells funktionieren wird, aber es könnte Ihnen einige Ideen geben, wonach Sie suchen sollten.
Hier ist ein Beispiel mit dieser Technik:
$ > ls
$ > touch yourfile.txt
$ > ls
yourfile.txt
$ > mkdir --parents ./some/path/; mv yourfile.txt $_
$ > ls -F
some/
$ > ls some/path/
yourfile.txt
mkdir -p `dirname /destination/moved_file_name.txt`
mv /full/path/the/file.txt /destination/moved_file_name.txt
Speichern Sie als Skript mit dem Namen mv oder mv.sh
#!/bin/bash
# mv.sh
dir="$2"
tmp="$2"; tmp="${tmp: -1}"
[ "$tmp" != "/" ] && dir="$(dirname "$2")"
[ -a "$dir" ] ||
mkdir -p "$dir" &&
mv "[email protected]"
Oder fügen Sie am Ende Ihrer ~/.bashrc-Datei eine Funktion hinzu, die die Standard-mv auf jedem neuen Terminal ersetzt. Die Verwendung einer Funktion ermöglicht es Bash, den Speicher zu behalten, anstatt jedes Mal eine Skriptdatei lesen zu müssen.
function mv ()
{
dir="$2"
tmp="$2"; tmp="${tmp: -1}"
[ "$tmp" != "/" ] && dir="$(dirname "$2")"
[ -a "$dir" ] ||
mkdir -p "$dir" &&
mv "[email protected]"
}
Diese basieren auf der Vorlage von Chris Lutz.