J'ai cet énorme dossier avec des milliers de fichiers non ordonnés. Est-il possible de déplacer les premiers 5000 vers un sous-dossier via la mv
commande? Pour l'instant je déplace des fichiers avec
mv *some_pattern* ./subfolder1/
Pour l'instant, je déplace les images de manière assez aléatoire, ce n'est pas vraiment important s'il n'y a pas exactement 5000 fichiers dans chaque sous-dossier. Y a-t-il une meilleure façon de le faire?
shell
command-line
shell-script
wildcards
Fabinout
la source
la source
Réponses:
la source
-
ou.
et en supposant qu'ilsubfolder1
n'apparaît pas dans cette liste.)$ sudo mv `ls | head -50000` 01/ sudo: unable to execute /bin/mv: Argument list too long
Avec
zsh
:Pour déplacer jusqu'à 5000 fichiers normaux dans l'ordre où ils se trouvent dans le répertoire.
Pour les 5000 premiers de la liste triée lexicographiquement:
Si vous obtenez une erreur concernant la liste d'arguments trop longue . Vous pouvez utiliser
zsh
lamv
commande buitin de en émettant:premier.
POSIX:
la source
Une version simple qui prend en charge des caractères spéciaux, des espaces, etc.
Pour que cela fonctionne tel
dir2
quel, il doit exister et vous devez l'exécuter à partir du répertoire parent dedir1
etdir2
.Cela déplacera 1000 fichiers de dir1 à dir2.
la source
ls -Q -S dir1 | head -1000 | xargs -i mv dir1/{} dir2/
pour déplacer 1000 plus gros fichiers dans dir1 (-S répertorie les fichiers par taille)ls -Q
cela ne produit pas une sortie compatible avecxargs
le format d'entrée attendu de. Il est utile pour les noms de fichiers contenant des caractères d'espace, mais pas pour les guillemets doubles ou les barres obliques inverses et nuit aux noms de fichiers contenant des caractères de contrôle, y compris TAB.Vous devrez peut-être faire quelque chose comme ceci:
Ce script fonctionne avec bash, ksh, sh et plusieurs variantes UNIX.
la source
destination
n'apparaisse pas dans cette liste.)exécuter sous la commande
Dans la
find
commande,.
(point) désigne le répertoire couranttrouve les fichiers qui commencent par Hello et se terminent par gz, les 5000 premiers fichiers seront déplacés vers le chemin
/data01/path/
la source
J'ai réussi à faire un mouvement de 50 000 sans l'erreur mv bash comme celle-ci
Assez drôle, c'était sur un partage samba, donc la limite de 50k est parce que l'interface graphique de l'Explorateur Windows n'aime pas plus de 60k fichiers dans un répertoire en général.
la source