J'ai 291 fichiers numérotés (commençant à 001 - titre et se terminant à 291 - titre) qui doivent être déplacés dans des répertoires séparés. (001 à 021 dans le dossier 1, 022 à 053 dans le dossier 2, ils ne sont pas nécessairement le même nombre de fichiers à chaque fois).
Je me suis dit que je pouvais le faire de façon dégoûtante comme ceci: ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh
Je suis presque certain qu'il y a une meilleure façon, alors que serait-ce?
EDIT: Donc, cela aurait bien fonctionné, mais je me souvenais ...
Je ne suis pas bloqué en utilisant un terminal, j'ai donc utilisé un gestionnaire de fichiers pour cliquer et faire glisser. La question demeure cependant.
ls -l | grep ^- | wc -l
obtenir le nombre de lignes.Réponses:
Puisque vous avez dit que ce n'était pas toujours exactement 21 fichiers, vous devez déplacer les fichiers manuellement, et pour le faire efficacement, vous pouvez utiliser l' extension d'accolade :
la source
file{001..21}name
, vous n'avez pas besoin d'utiliser de caractères génériques. Quoi qu'il en soit, heureux que cela fonctionne pour vous.Cela déplacera les fichiers comme vous l'avez décrit (sauf que la deuxième plage serait de 022 à 042 pour les 21 seconds fichiers).
la source
Ce que je veux dire, c'est de déplacer beaucoup de fichiers (comme des dizaines de milliers ou un million), le shell se plaindra de la liste des fichiers trop longtemps si vous utilisez simplement {1..20}, donc
Dans zsh , vous pouvez charger le module intégré mv :
après cela, vous pouvez utiliser une commande comme:
ou si vous écrivez des scripts shell, vous pouvez faire quelque chose comme ceci:
si vous n'utilisez pas zsh, vous pouvez vous référer à /unix/128559/solving-mv-argument-list-too-long
la source