Как записать вывод в файл с тем же именем, что и вход?

Мне интересно, как обрабатывать файлы из какой-либо папки dir1, если они передаются по различным задачам, и в конце мне хотелось бы, чтобы результат был написан в той же структуре папок и именах файлов, то есть у меня есть 2 файла; dir1 / file1 и dir1 / file2. Мне нужна следующая команда:

task1 dir1/* | task2 | task3 --output dir2/${filename}

для вывода dir2 / file1 и dir2 / file2, которые должны представлять обработанные файлы.

2 Solutions collect form web for “Как записать вывод в файл с тем же именем, что и вход?”

Перебирайте файлы в каталоге dir1 , получите базовое имя каждого файла, обработайте его, напишите в выходной файл:

 for path in dir1/*; do name="${path##*/}" task1 "$path" | task2 | task3 --output "dir2/$name" done 

Переменная подстановки ${path##*/} примет значение переменной path и удалит все до (и включает) последнее / . Это создает базовое имя файла.

task1 затем выполняется в файле в каталоге dir1 , результат передается на task2 а результат этого присваивается task3 . Последняя задача использует dir/$name в качестве операнда для своего переключателя --output .

 cd "dir1" && \ find . -maxdepth 1 -type f -exec sh -c ' # task2 on "$1" | task3 > "/path/to/dir2/${1##*/} ' {} {} \; 
Interesting Posts

Каковы последствия наличия большого количества файлов в каталоге в файловой системе ext4?

Как я могу изолировать данные своей файловой системы от другого системного корня?

Изменение цвета нижнего бара tmux

Как отобразить приветственное сообщение в unix?

Как загрузить все изображения с веб-сайта (а не веб-страницы) с помощью терминала?

Как переместить файл, если имя папки содержит имя файла

разница между локальным администратором Windows и корнем unix

Regex работает в оболочке, но не через скрипт Perl

изменить FAT16-раздел UUID

Сценарий, который использует запрос MySQL для автоматического удаления вывода

Может ли `tar -list -v` указать размер файла в формате для чтения?

Извлечь определенный текст из переменной в сценарии оболочки

top не работает в пакетном режиме: 'dumb': неизвестный тип терминала

gdb set overwrite logging on должен перезаписать gdb.txt правильно?

Как определить, поддерживает ли процессор гиперпоточность

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