Я основываю свой ответ на том факте, что у вас проблемы с обработкой имен файлов с пробелами в них.
У меня есть приложение для Linux, которое имеет дело с файлами, имена которых содержат встроенные пробелы. Ниже приведены выдержки из моего сценария оболочки bash, которые позволяют мне использовать цикл for, чтобы найти два файла и что-то с ними сделать.
В моем случае это было передать их программе Clojure, которая определяла, какие файлы были основаны на сигнатурах столбцов. Оба файла являются файлами .csv. Денежный выстрел меняет IFS, а затем восстанавливает его первоначальную стоимость, когда вы закончите. Это позволяет $ fnam содержать имя файла, если в нем есть пробелы.
# $IFS is internal file separator.
# The following little code snippet takes into account space-separated files.
# We set the file separator value to something other than space.
ORIGINAL_IFS=$IFS
IFS=$(echo -en "\n\b")
# You have to fond both types of files .CSV or .csv.
#This is the way to do it. cmn 11/1/2012
for fnam in `find bene_gic_in -maxdepth 1 \
-type f \( -name \*.csv -o -name \*.CSV \) \
-exec echo "{}" \;`
do
# Please note that $fnam may have embedded spaces in it, at this point,
# you could check # for the name, and make a decision about what to do
# with it, like
#
if [ "$fnam" = "a file name i expect" ]; then
# do something.
mv $fnam file_type1
fi
.
.
.
# Bring back original line separator value.
IFS=$ORIGINAL_IFS