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
.