Que diriez-vous de ce one-liner (en bash):
mkdir --parents ./some/path/; mv yourfile.txt $_
Décomposer cela :
mkdir --parents ./some/path
crée le répertoire (y compris tous les répertoires intermédiaires), après quoi :
mv yourfile.txt $_
déplace le fichier vers ce répertoire ($_ se développe jusqu'au dernier argument passé à la commande shell précédente, c'est-à-dire :le répertoire nouvellement créé).
Je ne sais pas dans quelle mesure cela fonctionnera dans d'autres shells, mais cela pourrait vous donner quelques idées sur ce qu'il faut rechercher.
Voici un exemple utilisant cette technique :
$ > 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
Enregistrer sous un script nommé mv ou 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]"
Ou mettez à la fin de votre fichier ~/.bashrc une fonction qui remplace le mv par défaut sur chaque nouveau terminal. L'utilisation d'une fonction permet à bash de la conserver en mémoire, au lieu d'avoir à lire un fichier de script à chaque fois.
function mv ()
{
dir="$2"
tmp="$2"; tmp="${tmp: -1}"
[ "$tmp" != "/" ] && dir="$(dirname "$2")"
[ -a "$dir" ] ||
mkdir -p "$dir" &&
mv "[email protected]"
}
Celles-ci sont basées sur la soumission de Chris Lutz.