78 votes

Script shell Linux pour chaque fichier d'un répertoire Saisissez le nom du fichier et exécutez un programme

Scénario :

Un dossier dans le système Linux. Je veux faire une boucle par tous .xls fichier dans un dossier.

Ce dossier se compose généralement de plusieurs dossiers, les différents types de fichiers (.sh, .pl,.csv,...).

Tout ce que je veux faire est de faire une boucle par tous les fichiers dans la racine et exécuter un programme uniquement sur .les fichiers xls.

S'il vous plaît aider!

Merci les gars :)

Edit :

Le problème, c'est le programme que j'ai à exécuter est "xls2csv' pour convertir de .xls de .le format csv. Ainsi, pour chaque .fichier xls que je dois saisir le nom de fichier et l'ajouter à .csv.

Par exemple, j'ai un test.xls fichier et les arguments bof xls2csv sont : xls2csv test.xls test.csv

Je n'ai plus de sens?

190voto

Ignacio Vazquez-Abrams Points 312628

frapper:

 for f in *.xls ; do xls2csv "$f" "${f%.xls}.csv" ; done
 

13voto

AndrewBourgeois Points 691
 for i in *.xls ; do 
  [[ -f "$i" ]] || continue
  xls2csv "$i" "${i%.xls}.csv"
done
 

La première ligne du do vérifie si le fichier "correspondant" existe réellement, car si rien ne correspond dans votre for , le do sera exécuté avec " * .xls "en $i . Cela pourrait être horrible pour votre xls2csv .

12voto

Tom Points 16783

Regardez la commande de recherche .

Qu'est-ce que vous recherchez est quelque chose comme

 find . -name "*.xls" -type f -exec program 
 

Posté

 find . -name "*.xls" -type f -exec xls2csv '{}' '{}'.csv;
 

va exécuter xls2csv file.xls file.xls.csv

Plus près de ce que vous voulez.

4voto

ghostdog74 Points 86060
 find . -type f -name "*.xls" -printf "xls2csv %p %p.csv\n" | bash
 

bash 4 (récursif)

 shopt -s globstar
for xls in /path/**/*.xls
do
  xls2csv "$xls" "${xls%.xls}.csv"
done
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X