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

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

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

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. Я просто написал короткую версию.

  • Редактируйте несколько строк из определенного раздела INI-файла
  • Заменить символы в строке соответствия
  • Разбор CSV с использованием AWK или SED
  • Использование SED для вырезания после 7-го символа каждой строки
  • Объединение альтернативных строк из двух файлов
  • как печатать поле между двойной цитатой
  • sed изменить формат строки журнала DNS
  • Распечатайте последнее поле
  • Существуют ли какие-либо скрипты sed, встроенные в основные дистрибутивы Linux?
  • Что означает <<<?
  • Как переименовать файлы с sed и csv
  • Замените все, кроме прописных букв, первым параметром (с sed)
  • Linux и Unix - лучшая ОС в мире.