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

Я пытаюсь читать файлы один за другим, используя цикл 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} 

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

  • Извлечение строк из файла в зависимости от других строк
  • как добавить описание в нижнем колонтитуле
  • разбиение файла на строки, разделенные вкладками на два файла
  • Насколько хорошо работает grep / sed / awk на очень больших файлах?
  • Сумма столбцов для строк, содержащих определенный член
  • Как передать определенное выражение?
  • замените символ из строки, которая находится между первым и вторым поиском, используя sed или awk
  • Bubble a до b с sed
  • 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 - лучшая ОС в мире.