Как просмотреть файлы, содержащие пробелы в имени файла?

Я пытаюсь читать файлы один за другим, используя цикл for, как показано ниже, передавая аргумент функциям. Аргумент 3 задает много проблем из-за пространства в именах файлов.

Пример:

source_file_restructure() { echo "inside the function" source_folder=$1 target_folder=$2 file_pattern=$3 delimiter=$4 echo $file_pattern echo " Getting inside the function.... " for file_name in `ls -Al ${source_folder}*"${file_pattern}"*.csv` do some processing....... done 

Вышеупомянутая команда ls не работает должным образом, когда есть файлы, содержащие пробелы, такие как файл 1.csv,

Вход:

 SOurce Folder : /home/test/ File Pattern : "file" Function argument : source_file_restructure ${source_folder} ${target_folder} "${file_pattern}" ${delimiter} 

Предложите некоторый вариант для решения проблемы.

  • Удалить ведущее 0 из определенного поля
  • sed на cygwin может заменить только одного персонажа?
  • Добавить текст до конца каждой строки
  • Добавить символ подчеркивания символов для всех каталогов в каталоге
  • Как заменить начальный ноль пробелом в SED?
  • grep точный блок строк (содержимое файла1) из файла2
  • Измените текст в теге, но только тег содержится в определенном блоке XML
  • Как заменить строку в файлах, используя звездочку в форме поиска
  • 3 Solutions collect form web for “Как просмотреть файлы, содержащие пробелы в имени файла?”

    замещать

     for file_name in `ls -Al ${source_folder}*"${file_pattern}"*.csv` 

    С:

     for file_name in "${source_folder}"*"${file_pattern}"*.csv 

    Вывод команды в backticks, как и в первой форме выше, подвержен разбиению слов. Вторая форма выше не использует обратные ссылки. Это, напротив, будет работать с любым именем файла, даже с теми, которые содержат пробелы, вкладки, символы новой строки или любой другой сложный символ.

    Кроме того, замените

     source_file_restructure ${source_folder} ${target_folder} "${file_pattern}" ${delimiter} 

    С

     source_file_restructure "${source_folder}" "${target_folder}" "${file_pattern}" "${delimiter}" 

    Без двойных кавычек оболочка будет выполнять разбиение слов. С помощью двойных кавычек функция будет вызываться правильно, даже если source_folder или target_folder имеют пробелы, вкладки, символы новой строки или другие сложные символы.

    Вы должны установить следующую переменную среды в первом скрипте:

     IFS=$(echo -en "\n\b") 

    Я использовал что-то вроде этого в одном из моих сценариев:

     ls -Q "$folderToRead" | while read file # ls -Q puts every entry between quotes : "file". do file=`echo $file | tr -d '"'` # This erases the quotes from the -Q argument, so you # can work on the file without worrying about it. 

    Конечно, вам нужно заставить его работать в вашем скрипте, отредактировав команду ls. Я просто написал короткую версию.

    Linux и Unix - лучшая ОС в мире.