come evitare lo spazio nel nome del file?

Ho un sacco di file che devono essere convertiti da .mp4 a .mpeg.one . Un mio amico mi ha suggerito questa semplice sceneggiatura. Tuttavia non funziona perché i nomi dei file contengono spazi vuoti.

Ecco la sceneggiatura:

 for f in $(ls *.mp4); do ffmpeg -i "$f".mp4 "$f".mprg; done 

In questo caso non è necessario utilizzare ls . Come regola generale, cerca sempre di utilizzare le funzioni incorporate di shell e glob anziché fare affidamento su programmi esterni (es. ls ) che possono introdurre problemi con brutte soluzioni.

Inoltre, non dovresti “manualmente” aggiungere l’estensione al nome del file di input (quello che dai a -i ) e dovresti rimuovere l’estensione sul file di output.

Quindi il comando dovrebbe essere:

 for f in *.mp4; do ffmpeg -i "$f" "${f%.mp4}".mprg; done 

Invece di ls , puoi usare find -print0 e xargs -0 :

 find -name '*.mp4' -print0 | xargs -0 -n1 ffmpeg -i '{}' '{}'.mpeg 

Seguito da un rinominare in seguito:

 rename s/mp4.mpeg$/mpeg/ *.mp4.mpeg 
  • Non è necessario
  • Probabilmente vuoi dire .mpeg come estensione
  • Se si posiziona il " giusto, gli spazi non saranno aproblem
  • ffmpeg -i "$f".mp4 nel tuo comando cercherà eg files.mp4.mp4, che probabilmente non intendevi
  • Essere consapevoli del fatto che i file di output saranno chiamati ad esempio files.mp4.mpeg

Possibile soluzione:

 for f in *.mp4; do ffmpeg -i "$f" "$f".mpeg; done