Che ne dici di questa battuta (in bash):
mkdir --parents ./some/path/; mv yourfile.txt $_
Scomponendolo:
mkdir --parents ./some/path
crea la directory (incluse tutte le directory intermedie), dopodiché:
mv yourfile.txt $_
sposta il file in quella directory ($_ si espande fino all'ultimo argomento passato al comando shell precedente, ovvero:la directory appena creata).
Non sono sicuro fino a che punto funzionerà in altre shell, ma potrebbe darti qualche idea su cosa cercare.
Ecco un esempio che utilizza questa tecnica:
$ > 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
Salva come script chiamato 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]"
Oppure metti alla fine del tuo file ~/.bashrc come una funzione che sostituisce il mv predefinito su ogni nuovo terminale. L'uso di una funzione consente a bash di conservarlo in memoria, invece di dover leggere ogni volta un file di script.
function mv ()
{
dir="$2"
tmp="$2"; tmp="${tmp: -1}"
[ "$tmp" != "/" ] && dir="$(dirname "$2")"
[ -a "$dir" ] ||
mkdir -p "$dir" &&
mv "[email protected]"
}
Questi basati sulla presentazione di Chris Lutz.