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

Я пытаюсь читать файлы один за другим, используя цикл 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 + удалить строки, содержащие строку, кроме строк с
  • Как grep все строки, где начальная строка заканчивается шаблоном, а конечная строка заканчивается другим?
  • Обновите или добавьте JAVA_HOME с sed
  • Извлечение пяти случайных элементов из списка с помощью 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. Я просто написал короткую версию.

    Interesting Posts

    Изменить временную метку файла и время показа вместо года с помощью ls

    Как выйти из системы и применить новые настройки группы

    Как получить DisplayID для монитора?

    Моя установка Postfix отправляет спам; как остановить его?

    rsyslogd регистрируется только с удаленных серверов после включения UDP: 514 на Debian

    «Не обычный файл» при попытке просмотреть файл .gitignore

    Скопируйте файл, если ошибка не возникла, иначе удалите скопированную часть

    Запустите приложение QT при загрузке на встроенном устройстве Linux (Beaglebone Black)

    Как запустить команду каждые 5 секунд на Solaris?

    Удаление файлов, если содержимое не соответствует шаблону

    В чем цель `rm -P`?

    Сохранять форматирование, когда командный вывод отправляется в переменную?

    Почему входы / выходы с высоким диском уменьшают оперативность / производительность системы?

    Автоматически загружать пользовательскую функцию при запуске с помощью awk?

    Почему «dir-or-file-in-usr-local» является ошибкой, а не предупреждением?

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