Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Loop through filenames with spaces within a path

Tags:

bash

scripting

I wanted to pass the path name to the script, but my path has spaces (eg. /Users/netto/iTunes \Media/Music/). I have tried putting the actual path directly on the for loop, and I was able to get all the files. Unfortunately, I could not pass it as variable. I have tried both double quote, and single quote. This is what I have currently

$PATH=$1
for f in $PATH; do
   echo "Processing file $f " 
done

Please let me know on how to do this. Thank you in advance.

like image 376
Netto Avatar asked Oct 17 '25 03:10

Netto


1 Answers

Spaces in variables are expanded at command level, so to solve the problem you can either put quotation marks around "$1" (so spaces are properly escaped) or use bash arrays.

Here is two example that should work:

 #!/bin/bash
DIR="$1"
for f in "$DIR"/* 
do
  echo "Processing file $f " 
done

or using bash arrays:

#!/bin/bash
FILES=("$1"*)
for f in "${FILES[@]}"
do
  echo "Processing file $f " 
done
like image 164
Davide Spataro Avatar answered Oct 19 '25 18:10

Davide Spataro



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!