2016-11-21 2 views
1
echo "super-super.show.s01.e01" | grep -oPi '(?<=-)[\w\W]+(?=\.s\d\d)|s\d\d|e\d\d' | parallel -N3 ln -sf ~/super-super.show.s01.e01 ~/TV/{1}/{2}/{3} 
# tries to make ~/TV/super.show/s01/e01 failes due to no such file or directory 

Comment puis-je écrire mon code afin qu'il crée le répertoire nécessaire?ln -s crée le répertoire nécessaire

s'il n'y a pas e01 dans la chaîne, il tente de créer un lien vers:

~/TV/super.show/s01/{3} 

Comment puis-je écrire mon code il crée alors lien vers:

~/TV/super.show/s01 
+1

Avez-vous vraiment besoin de 'parallel' pour créer des liens symboliques? Si vous réécrivez votre code en quelque chose de lisible en utilisant une boucle while, alors vous pouvez simplement utiliser 'mkdir -p'. – kay

+0

Eh bien, je ne suis pas tout à fait sûr. Je veux créer des liens où j'utilise la sortie de 'grep' pour créer le sous-répertoire des liens et j'ai réussi à le faire avec' parallel'. Cela peut-il être fait plus facilement? – angelsen

+0

@ mklement0 J'ai essayé avec 'xargs -i {}', mais je ne reçois la variable '{}' que pour plusieurs sorties de 'grep' ... pour autant que je sache. – angelsen

Répondre

1

Peut-être:

echo '>>super<< 12" star*show.s01.e01.mp4' | 
    parallel --rpl '{dir} s:\.(s\d\d):/$1:; s:\.(e\d\d):/$1:; s/\....$//;' mkdir -p ~/TV/{dir}';' ln -s {} ~/TV/{dir} 
+0

Devinez je vais devoir le faire de cette façon j'espère pourrait faire tout ce que je voulais en une ligne – angelsen

+1

Bien fait GNU 'parallel' appelle cette méthode de modification de l'entrée a [Perl expression remplacement chaîne] (https://www.gnu.org/software/parallel/parallel_tutorial.html# Cordes de remplacement). – mklement0