LINUX.ORG.RU

Редактирование и передача бинарнику xargs

 


0

1

Всем привет!

1.Есть папка, где могут находиться файлы с расширением .123. 2.Если они там ест, то их нужно перевести в .222 таким экзешником с такими аргументами для одного файла

mybin -i exampleN.123 -option opt exampleN.456

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

find ./ -iname '*.123' -exec mybin -i {} -option opt ???

У меня вопрос, как это дописать так, чтобы к формату команды подходило, а именно передавало тоже самое имя как написано выше, но вместо *.123 было *.456. Спасибо.



Последнее исправление: alexbad (всего исправлений: 1)

find ./ -iname '*.123' -exec mybin -i {} -option opt ???

find -name '*.123' -exec bash -c "file={}; mybin -i ${file} -option opt ${file%123}456" \;
Kuzz ★★★
()
Ответ на: комментарий от Kuzz

Спасибо, вот это оперативность. Теперь более частный вопрос:

./ffmpeg -i 'test.264' -vcodec copy test.avi --- Всё работает

find -name '*.264' -exec sh -c «file={}; ./ffmpeg -i ${file} -vcodec copy ${file%264}avi» \;

ffmpeg запускается, пишет приветствие, но спотыкается и пишет:

-vcodec: No such file or directory

в чём дело?

alexbad
() автор топика
Ответ на: комментарий от alexbad

А ffmpeg лежит в той же директории, что и рабочие файлы?

Если нет, то можно так:

find -name '*.264' -exec sh -c "file=\"{}\"; ffmpeg -i \"${file}\" -vcodec copy \"${file%264}avi\"" \;

А вообще, глянуть бы на выхлоп такой конструкции:

find -name '*.264' -exec sh -c "file=\"{}\"; echo \"${file}\"  \"${file%264}avi\"" \;

Kuzz ★★★
()
Ответ на: комментарий от Kuzz

В одной и той же директории лежат, путь не прописан, я думал это никак не влияет...

А вот интересуший вывод

find -name '*.264' -exec sh -c «file=\»{}\"; echo \«${fi le}\» \«${file%264}avi\»" \; avi avi avi avi avi

alexbad
() автор топика
Ответ на: комментарий от Kuzz

баша нет в силу определённых причин :(

alexbad
() автор топика
Ответ на: комментарий от Kuzz

Странно - ффмпег не принимает такие входящие, пишет

«test.264»: No such file or directory

Что же ему писать вместо \«$i\» ???

Если слэши убрать, то там уже invalid argument, но всё ведь в одной папке-то

alexbad
() автор топика
Ответ на: комментарий от alexbad
for i in `ls *.264`; do ./ffmpeg -i $i -vcodec copy `echo $i | sed -e 's/264$/avi/'`; done

Имена файлов должны быть без пробелов.

Kuzz ★★★
()
Ответ на: комментарий от Kuzz

я убрал слеши и заработало!!! спасибо!

Только вопрос - будет ли ето безопасно для больших файлов? в начале ругается жёлтым, но задачу выполняет

[h264 @ 0x37410] max_analyze_duration 5000000 reached at 5000000
[h264 @ 0x37410] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 50.00 (50/1) -> 25.00 (50/2)
Input #0, h264, from 'test4.264':
  Duration: N/A, bitrate: N/A
    Stream #0.0: Video: h264 (High), yuv420p, 768x576, 25 fps, 25 tbr, 1200k tbn, 50 tbc
Output #0, avi, to 'test4.avi':
  Metadata:
    ISFT            : Lavf53.5.0
    Stream #0.0: Video: libdm365_h264, yuv420p, 768x576, q=2-31, 25 tbn, 25 tbc
Stream mapping:
  Stream #0.0 -> #0.0
Press [q] to stop, [?] for help
frame=  289 fps=  0 q=-1.0 Lsize=    1090kB time=00:00:11.56 bitrate= 772.5kbits/s    
video:1078kB audio:0kB global headers:0kB muxing overhead 1.163842%

alexbad
() автор топика
Ответ на: комментарий от alexbad

ну кстати вчитался и понял что глупый вопрос задал, там ведь только анализ идёт короче спасибо ещё раз

alexbad
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.