2014-08-30 5 views
0

Я пытался научиться адекватно выполнять одну команду несколько раз с помощью командной строки. Хотя я научился делать одну команду без входных и выходных файлов, она становится более сложной, когда она им нужна.одиночная повторяющаяся команда с входными и выходными файлами

Для этого требуется команда cp, поэтому используйте это в качестве примера. Я просматриваю все изображения с расширением .png и копирую их. Так я пришел с после того, как с помощью Google является:

find -regex ".*\.\(png\)" -exec cp {} {}3 \; 

Единственная проблема в том, что я должен переименовать файл с любой фигурой после имени, поэтому он получает переименован в нечто вроде file.png3 вместо файла file.png. Я не могу понять, как это сделать, если по-другому, поскольку я не могу поместить новую цифру перед именем, поскольку он, похоже, не работает.

Есть ли лучший способ сделать это, или я об этом совершенно не так?

+0

Вам нужно уточнить, что именно вы пытаетесь сделать, тогда мы можем дать вам несколько советов. Если вы хотите применить действие к списку файлов, цикл 'for', вероятно, достаточен, например. 'для f в * .png; do echo $ (basename "$ f" .png); сделано' –

ответ

2

Я не уверен, как вы можете сделать это в одной команде поиска, но вы можете разделить ее. Сначала найдите файлы с помощью find. Затем используйте sed, чтобы удалить расширение .png. Наконец, используйте xargs для запуска функции копирования для каждого файла. Например:

find -regex ".*\.\(png\)" | sed -r 's/.png//g' | xargs -I {} cp {}.png {}_copy.png 

Если вы не знали, труба "|" отправит вывод одной программы в следующую.

В качестве альтернативы вы можете просто изменить начало имени файла (так что 3img.png вместо img.png3) или скопировать в новую папку.

+0

очень приятно +1. не об этом –

+0

это выполняет действие точно, как я спросил. Благодарю. –

Смежные вопросы