Les noms de fichiers et les noms de dossiers ne correspondent pas

J’ai divisé un gros fichier (2.8G) dans une liste de petits fichiers (284 fichiers .txt) en utilisant la chaîne suivante:

split -a 3 -C 10m -d 2 file.txt output_ find . -type f -exec mv '{}' '{}'.txt \; 

Ensuite, j’ai créé une liste de 284 dossiers, car je voudrais placer chacun des 284 fichiers dans le dossier correspondant. La chaîne que j’ai utilisée est la suivante:

 for num in {1..284}; do mkdir output$num done 

Pour copier chaque fichier dans le dossier, la chaîne est la suivante:

 for i in *.txt do dir=${i%.txt} cp "$i" "$dir" done 

Maintenant, le problème est de placer chaque fichier dans le dossier correspondant puisque le premier fichier est nommé par exemple: output_000.txt alors que le dossier est nommé output_0. Cela se produit pour les fichiers de 0 à 100.

Comment puis-je résoudre ce problème?

Si vous avez une chaîne de nombres remplie, par exemple s=001 , vous pouvez la convertir en un nombre en utilisant $((s)) .

Essayez de changer votre script pour:

 for i in *.txt do prefix=${i%.txt} num=$((${prefix#*_})) cp "$i" "output_${num}" done 

Donc, output_000.txt sera copié dans output_0 .