Exemple de scénario:
J'ai plusieurs fichiers se terminant par .torrent
et je voudrais les déplacer dans des dossiers qui ont le même nom.
Par exemple, étant donné les fichiers suivants:
abc.torrent
def.torrent
some files has spaces.torrent
or [special] (characters).torrent
or . (dots).torrent
xyz.torrent
J'aimerais les déplacer dans les dossiers correspondants (le cas échéant) qui portent exactement le même nom, par exemple:
abc.torrent
entre dansabc/
def.torrent
entre dansdef/
- etc
Si le dossier n'existe pas, le fichier doit rester intact (car il peut s'agir d'un téléchargement incomplet).
Je crois que BitTorrent n'a pas de telles options. Si tel est le cas, j'aimerais trouver une ligne de commande pour y parvenir.
Je souhaite éventuellement spécifier le dossier source de mes fichiers et le dossier de destination avec les répertoires attendus.
Des idées?
Réponses:
Non récursivement:
le
${var%pattern}
la syntaxe supprime la correspondance la plus courtepattern
à partir de la fin d'une variable. Dans ce cas, il supprime simplement l'extension.Récursivement (en utilisant
bash
):le
globstar
option fait**
correspond à tous les fichiers et 0 ou plusieurs répertoires. Notez que ce qui précède s'attend à ce que le répertoire cible soit un sous-répertoire du répertoire parent du fichier torrent. Donc, si un fichier est àfoo/bar/baz.torrent
, il sera déplacé versfoo/bar/baz/baz.torrent
.Non récursivement, création du répertoire en cas d'absence:
le
-p
l'option ditmkdir
pour ne pas imprimer d'erreur si le répertoire existe déjà et pour créer des répertoires parents au besoin. Alors,mkdir -p foo/bar/baz
créera également lefoo
etbar
répertoires s'ils n'existent pas.Récursivement, création du répertoire en cas d'absence:
la source
$_
dans lemv
commande en tant quemkdir
semble le mettre à jour, que le répertoire existe ou non.**/*torrent
version génère des chemins, donc-d
vérifier contre eux (pas nommer lui-même), voici la version qui en utilisant les noms de base et se déplacent dans/foo
dossier:for t in **/*torrent; do [ -d /foo/"$(basename "${t%.*}")" ] && mv -v "$t" /foo/"$(basename "${t%.*}")/"; done
Comme je ne pouvais pas trouver une telle option sur la version OS X de BitTorrent, j'ai écrit le one-liner suivant:
Cela cherchera le
.torrent
fichiers dans le répertoire en cours (.
) et trouver les dossiers (DST
) avec le même nom trouvé récursivement dans le même dossier (.
). Pour rechercher des répertoires différents, modifiez les points (.
) vers des destinations appropriées. Voir le script complet:mv_torrents.sh
.la source