[MEGOLDVA] "Sorszámozott" fájlok összefűzése jó sorrendben (n1, n2...n10)

Már kisült az agyam a gúglizástól, de nem sikerült megfelelően körbeírnom a problémát, így nem találtam megfelelő választ sem.

Adott egy csomó fájl:
valami1.ts
valami2.ts
(...)
valami9.ts
valami10.ts
valami11.ts
(...)
valami99.ts
valami100.ts
valami101.ts
(...)

...estébé, magyarul nem zero paddelt számok vannak a fájlnevekben, ha pedig Windows parancssorban ráeresztek egy copy /b *.ts all.ts parancsot, akkor ez a drága olyan sorrendben kezdi el összefűzni őket, hogy valami1.ts, valami10.ts, valami100.ts, valami101.ts ésatöbbi. A fájlokat az összefűzés után ffmpeg rágná át (ffmpeg -i all.ts -acodec copy -vcodec copy all.mp4), ami tudom, hogy képes fájlneveket tartalmazó txt fájlból dolgozni, de egy általános megoldás érdekelne erre a problémára, lehetőleg parancssoros. Nyilván elő tudom venni a Bulk Rename Utility-t, de na. Az oprendszer Windows 10, ha 3rd party util csinálja a varázslatot, az sem gond.

Előre is köszi az ötleteket.

Szerk.:
MEGOLDVA!
A helyes megfejtők között Microsoft pólót akartam kisorsolni, de mrceeka szállította a választ, neki meg úgyis biztos van ;)

Hozzászólások

Szia,

total commanderrel meg lehet szerintem csinálni.
Egy könyvtárba teszed a valami1.ts, valami2.ts.... file-okat, és beállítod a total commandert, hogy "természetes" sorrendbe állítsa a file neveket: Configuration menu / Options / Display / Sort method: "Natural sorting: alphabetical and numbers".
Aztán, ráállsz a cursor-ral a valami1.ts-re, és Files menu / Combine files.

Üdv,
Gergő

Mennyire szempont ezt a Windows beépített eszközeivel megoldani, vagy lehet használni third-party programot erre a célra? Mivel ffmpeg van, ezért gondolom más is lehet third-party.

Ez esetben, talán az a legegyszerűbb, ha felteszel egy Windows-ra lefordított GNU sort-ot (cygwin, stb.) ami képes natural order szerint rendezni a fájl és/vagy az stdin tartalmát. (sort -V)

"Az oprendszer Windows 10, ha 3rd party util csinálja a varázslatot, az sem gond."
Van cygwin meg Ubi alrendszer. Abbol felteszed, amelyik tetszik. Utana:
for i in `seq 101`;do echo cat "valami${i}.ts" >>all.ts; done

--
When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Sima shellben is van for loop és copy /b, de inkább PS-ben csinálnám. Valami ilyesmi (nem futtattam):


New-Item -ItemType file minden.ts
foreach($i in 1..10){
  Get-Content "file$($i).ts" | Add-Content minden.ts
}

Köszönöm. PowerShellhez totál hülye vagyok, reménykedtem is abban, hogy valaki bedob egy erre alapuló megoldást.

Kipróbáltam amit írtál, de valami nem klappol vele. Eleve a forrásfájlok és az összefűzött fájl mérete nem pontosan stimmelt (ellentétben a copy /b módszerrel) és az ffmpeg sem tudta megrágni az eredményt ("Invalid data found when processing input"). Aztán picit utánanéztem és az Add-Content eleve alapértelmezetten ASCII módban dolgozik. Ha viszont használom a doksijában leírt -Encoding Unknown kapcsolót (amit elvileg a bináris működéshez ajánl), akkor még viccesebb az eredmény, a fájlméret a forrásfájlok kb. duplája.

Sajnálom, és igazából valami ilyentől féltem. (Mármint, hogy még a globbingot is sikerült elbaszniuk ott a Microsoft Drive-on. Hogy a tökömben illeszkedhet a valami??.ts a valami1.ts-re, azt fel nem foghatom.)

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

1. SOHA ne sorszámozz fájlnevet így: 1, 2, 3, 4, ....9, 10, hanem így: 01, 02,03,04... 10, stb

... és akkor mehet valami ilyesmi script:

#######################################################
ALLDATA="./gyujto_file.ts"
rm $ALLDATA

ls ./valami*.ts > ./stream.lst
cat < ./stream.lst | while read DATA_STREAM
do

cat < $DATA_STREAM >> $ALLDATA

echo $DATA_STREAM
done
#######################################################

> Sol omnibus lucet.

cc.bat:

SET fn=valami
FOR /F %%i IN ('dir %fn%*.ts /b ^| find /c "%fn%"') DO SET cnt=%%i
copy %fn%1.ts all.ts
FOR /L %%j IN (2,1,%cnt%) DO copy /b all.ts+%fn%%%j.ts all.ts

Üdv,
Marci

emlekeim szerint van gnu coreutils windowsra, abban gnu sort, es az a sima windowsos sorttal ellentetben tud numerikus rendezest, a tobbit majd kesobb kitalalom :D)

** mindjart ki is probaltam :

>>>>>
c:\teszt>dir /b | "c:\program files\gnuwin32\bin\sort" -g
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt
10.txt
11.txt
12.txt
21.txt
32.txt
35.txt
98.txt
<<<<<

--
HUP te Zsiga !

Én ffmpeg-gel csinálnám, ugyanis az egymás mögé rakosgatott transport stream konténernek nem fognak örülni a médialejátszók. Szóval valami ilyesmi

dir /b > lista.txt
ffmpeg -f concat -i lista.txt -c copy output.ts

No keyboard detected... Press F1 to run the SETUP

Akkor meg kiváltképp jó. Nem -i all.ts paraméterrel hívod meg, hanem -i lista.txt-vel és készen is vagy. Még egyszerűbb is, mint először feleslegesen összefűzni és utána konvertálni, így megúszod az egészet egyetlen lépésből.

Azt nem tudtam, hogy a ts-streamnek az összefűzés nem számít.
No keyboard detected... Press F1 to run the SETUP

ls *.ts | sort -V | while read names; do cat $names >>valamik_egyben.ts; done;

mpeg ts/ps -nél működik a sima összemásolás

-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba