¿Qué tal este one-liner (en bash):
mkdir --parents ./some/path/; mv yourfile.txt $_
Desglosando eso:
mkdir --parents ./some/path
crea el directorio (incluidos todos los directorios intermedios), después del cual:
mv yourfile.txt $_
mueve el archivo a ese directorio ($_ se expande al último argumento pasado al comando de shell anterior, es decir:el directorio recién creado).
No estoy seguro de hasta qué punto funcionará esto en otros shells, pero podría darle algunas ideas sobre qué buscar.
Aquí hay un ejemplo usando esta técnica:
$ > 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
Guardar como un script llamado mv o 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]"
O colóquelo al final de su archivo ~/.bashrc como una función que reemplaza el mv predeterminado en cada nueva terminal. El uso de una función le permite a bash mantenerla en la memoria, en lugar de tener que leer un archivo de script cada vez.
function mv ()
{
dir="$2"
tmp="$2"; tmp="${tmp: -1}"
[ "$tmp" != "/" ] && dir="$(dirname "$2")"
[ -a "$dir" ] ||
mkdir -p "$dir" &&
mv "[email protected]"
}
Estos se basan en la presentación de Chris Lutz.