syntax.us Let the syntax do the talking
Blog Contact Posts Questions Tags Hire Me

Question:
In Bash, how do I loop through a directory of files?

A use-case I encounter frequently is reading text lines from a subset of files in a directory and acting on them.

For example, a site named truefx.com offers free Forex data in CSV format.

I copied some files from that site into a directory under my home directory.
dan@z2.z2 ~/truefx $ 
dan@z2.z2 ~/truefx $ ls -la
total 284048
drwxrwxr-x.  2 dan dan     4096 Dec  7 08:53 .
drwx------. 61 dan dan     4096 Dec  7 04:40 ..
-rw-rw-r--.  1 dan dan  9288113 Dec  7 08:50 AUDUSD-2014-08.zip
-rw-rw-r--.  1 dan dan 12856968 Dec  7 08:51 AUDUSD-2014-09.zip
-rw-rw-r--.  1 dan dan 16955186 Dec  7 08:52 AUDUSD-2014-10.zip
-rw-rw-r--.  1 dan dan 12397661 Dec  7 04:09 AUDUSD-2014-11.zip
-rw-rw-r--.  1 dan dan 10260754 Dec  7 08:50 EURUSD-2014-08.zip
-rw-rw-r--.  1 dan dan 14909113 Dec  7 08:51 EURUSD-2014-09.zip
-rw-rw-r--.  1 dan dan 24385475 Dec  7 08:52 EURUSD-2014-10.zip
-rw-rw-r--.  1 dan dan 16381571 Dec  7 04:11 EURUSD-2014-11.zip
-rw-rw-r--.  1 dan dan  9687534 Dec  7 08:51 GBPUSD-2014-08.zip
-rw-rw-r--.  1 dan dan 14832412 Dec  7 08:51 GBPUSD-2014-09.zip
-rw-rw-r--.  1 dan dan 15211260 Dec  7 08:52 GBPUSD-2014-10.zip
-rw-rw-r--.  1 dan dan  9818396 Dec  7 04:11 GBPUSD-2014-11.zip
-rw-rw-r--.  1 dan dan  6562891 Dec  7 08:51 NZDUSD-2014-08.zip
-rw-rw-r--.  1 dan dan  8312093 Dec  7 08:51 NZDUSD-2014-09.zip
-rw-rw-r--.  1 dan dan  9816103 Dec  7 08:52 NZDUSD-2014-10.zip
-rw-rw-r--.  1 dan dan  4745994 Dec  7 04:11 NZDUSD-2014-11.zip
-rw-rw-r--.  1 dan dan  6449473 Dec  7 08:51 USDCAD-2014-08.zip
-rw-rw-r--.  1 dan dan  9199755 Dec  7 08:51 USDCAD-2014-09.zip
-rw-rw-r--.  1 dan dan 10916612 Dec  7 08:52 USDCAD-2014-10.zip
-rw-rw-r--.  1 dan dan  4485426 Dec  7 04:11 USDCAD-2014-11.zip
-rw-rw-r--.  1 dan dan  8309066 Dec  7 08:51 USDJPY-2014-08.zip
-rw-rw-r--.  1 dan dan 13237409 Dec  7 08:51 USDJPY-2014-09.zip
-rw-rw-r--.  1 dan dan 21363356 Dec  7 08:52 USDJPY-2014-10.zip
-rw-rw-r--.  1 dan dan 20422415 Dec  7 04:11 USDJPY-2014-11.zip
dan@z2.z2 ~/truefx $ 
dan@z2.z2 ~/truefx $ 
dan@z2.z2 ~/truefx $ 
Next I wrote a script to demonstrate how to loop through those files so that I can unzip each one.
#!/bin/bash

# unzip_truefx.bash

cd ~/truefx/

for file in ~/truefx/*USD*zip
do
  unzip -p $file > ${file}.csv
done

ls -la *.csv
Output from the script is displayed below:

dan@z2.z2 ~/tmp $ bash unzip_truefx.bash
-rw-rw-r--. 1 dan dan  76196524 Dec  8 06:01 AUDUSD-2014-08.zip.csv
-rw-rw-r--. 1 dan dan 103314085 Dec  8 06:01 AUDUSD-2014-09.zip.csv
-rw-rw-r--. 1 dan dan 133008407 Dec  8 06:01 AUDUSD-2014-10.zip.csv
-rw-rw-r--. 1 dan dan  96161949 Dec  8 06:01 AUDUSD-2014-11.zip.csv
-rw-rw-r--. 1 dan dan  83822568 Dec  8 06:01 EURUSD-2014-08.zip.csv
-rw-rw-r--. 1 dan dan 120989920 Dec  8 06:01 EURUSD-2014-09.zip.csv
-rw-rw-r--. 1 dan dan 198471487 Dec  8 06:01 EURUSD-2014-10.zip.csv
-rw-rw-r--. 1 dan dan 131085077 Dec  8 06:01 EURUSD-2014-11.zip.csv
-rw-rw-r--. 1 dan dan  76530320 Dec  8 06:01 GBPUSD-2014-08.zip.csv
-rw-rw-r--. 1 dan dan 113948004 Dec  8 06:01 GBPUSD-2014-09.zip.csv
-rw-rw-r--. 1 dan dan 114907726 Dec  8 06:01 GBPUSD-2014-10.zip.csv
-rw-rw-r--. 1 dan dan  73542971 Dec  8 06:01 GBPUSD-2014-11.zip.csv
-rw-rw-r--. 1 dan dan  50294450 Dec  8 06:01 NZDUSD-2014-08.zip.csv
-rw-rw-r--. 1 dan dan  61327354 Dec  8 06:01 NZDUSD-2014-09.zip.csv
-rw-rw-r--. 1 dan dan  70063098 Dec  8 06:01 NZDUSD-2014-10.zip.csv
-rw-rw-r--. 1 dan dan  33688109 Dec  8 06:01 NZDUSD-2014-11.zip.csv
-rw-rw-r--. 1 dan dan  51028497 Dec  8 06:01 USDCAD-2014-08.zip.csv
-rw-rw-r--. 1 dan dan  71299402 Dec  8 06:01 USDCAD-2014-09.zip.csv
-rw-rw-r--. 1 dan dan  82840984 Dec  8 06:01 USDCAD-2014-10.zip.csv
-rw-rw-r--. 1 dan dan  33929591 Dec  8 06:01 USDCAD-2014-11.zip.csv
-rw-rw-r--. 1 dan dan  67467562 Dec  8 06:01 USDJPY-2014-08.zip.csv
-rw-rw-r--. 1 dan dan 106235152 Dec  8 06:01 USDJPY-2014-09.zip.csv
-rw-rw-r--. 1 dan dan 171373109 Dec  8 06:01 USDJPY-2014-10.zip.csv
-rw-rw-r--. 1 dan dan 162821019 Dec  8 06:01 USDJPY-2014-11.zip.csv
dan@z2.z2 ~/tmp $ 
dan@z2.z2 ~/tmp $ 
So, the Bash language offers convenient and simple syntax for looping through a directory of files.


syntax.us Let the syntax do the talking
Blog Contact Posts Questions Tags Hire Me