Intereting Posts
Как заблокировать область экрана Xwindow из курсора? Почему большинство linux-дистрибутивов по умолчанию gnome? Linux Mint 18 не может подключиться к какой-либо сети Wi-Fi Как запустить исполняемый файл .sh на удаленном сервере из локального пула на удаленном пути? Что я делаю не так с моими командами Linux? Успешно инициализирован wpa_supplicant, но я не подключен и не могу достичь wpa_cli Как сделать утилиту «человек» такой же всеобъемлющей, как ss64.com? Замените экземпляры слов своим прикрепленным к нему числом Добавление синтаксиса crontab Где и как мне создать новые общесистемные пункты меню для CentOS / RH 5? SSH: проинструктировать задний туннель для выхода по сломанной трубе? Можем ли мы отделить команды в LFS? Остановить atieventsd наводнения моего журнала Проблемы с правилами udev для запуска сценария bash при отключении жесткого диска Как заменить «& # x5c» на «/» в файле с помощью командной строки?

генерировать имена файлов в цикле

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я использую Mac OSX. Сценарий bash находится в другом каталоге из файлов, требующих обработки. Отсюда начинается моя борьба …

ПОМОЩЬ 1 : У меня есть несколько файлов, каждый из которых размещен в подкаталоге родительского каталога, который должен быть подан в качестве входных файлов для моего инструмента биоинформатики. Я обнаружил, что цикл for будет работать для этого.

for file in ~/Desktop/parent\ folder/*/*.txt; do exTool INPUT= ${file##*/} OUTPUT= ${file%.txt}_exd.txt 

Я надеюсь ввести файл (вырезая список папок, прикрепленный к файлу $ file), а затем вывести файл, удалив «.txt» и добавив _exd.txt. Ошибка, которую я получаю, заключается в том, что на входе указан список папок, и в частности, «родительская папка» whitespace вызывает неправильную информацию ввода.

HELP 2 : Как расширение первого случая, если я хочу вывести файл в тот же подкаталог, что и вход, нужно ли добавить специальную команду?

ПОМОЩЬ 3 : Если у меня есть 2 файла в каждом подкаталоге (input_1.txt и input_2.txt), и я хотел бы ввести оба в одну команду. Как выглядит сценарий, если он вложен в цикл for?

 for file in ~/Desktop/parent\ folder/*/*.txt; do bioTool INPUT1= ${file%.txt}_1.txt INPUT2= ${file%.txt}_2.txt OUTPUT= ${file%%.*} 

Для вывода обратите внимание, что мне нужно только базовое имя файла, так как инструмент добавит число в конце имени для обозначения выхода 1-го и 2-го файлов и расширения. По какой-то причине я чувствую, что секция после «in» в цикле for выполняется неправильно. Это было решение для коленного судорог для того, чтобы иметь скрипт в каталоге, отличном от файлов.

Любая помощь будет принята с благодарностью, поддержана, понравится, принята, одобрена. Большое спасибо за Вашу помощь.

ПОМОЩЬ 1

Из-за пробела вам нужно указать:

 INPUT= "${file##*/}" OUTPUT= "${file%.txt}"_exd.txt 

Кажется немного странным, однако, что между INPUT= и именем файла есть пробел.

ПОМОЩЬ 3

Если у вас есть файл input_1.txt то ${file%.txt}_1.txt становится input_1_1.txt .

Я хотел бы указать точное имя файла:

 for file in ~/Desktop/parent\ folder/*/input_1.txt; do bioTool INPUT1= "${file}" INPUT2= "${file%_1.txt}_2.txt" OUTPUT= "${file%%.*}" done 

ПОМОЩЬ 4

Это вообще не оболочка.

изменение в подкаталоги

 for file in ~/Desktop/parent\ folder/*/input_1.txt; do subdir="${file%/*}" pushd "$subdir" &>/dev/null file="${file##*/}" bioTool INPUT1= "${file}" INPUT2= "${file%_1.txt}_2.txt" OUTPUT= "${file%%.*}" popd &>/dev/null done