I want to do zero-padding for names of files. what should I do if not all images exist like 1.JPEG doesn't exist or 99.JPEG or 110.JPEG ?
$ for n in $(seq 9); do mv $n.JPEG 0$n.JPEG; done; mv: cannot stat ‘1.JPEG’: No such file or directoryI do not want to rename manually because order of videos are important.
32 Answers
You can use if inside the loop to check if the file exists. And if it does, then only mv operation would take place.
for n in $(seq 9)
do if [[ -f $n.JPEG ]] then mv $n.JPEG 0$n.JPEG fi
done;Or in one line:
for n in $(seq 9); do if [[ -f $n.JPEG ]]; then mv $n.JPEG 0$n.JPEG; fi done; Using parameter expansion you can split the filename into name and extension, then glue them together with printf formatting
#!/bin/bash
for i in *; do mv $i $(printf %04d.%s\\n ${i/./ })
doneprintf formatting:
%04dpad digit with four zeros.%sString of characters.
${parameter/pattern/string}
- Pattern substitution; parameter is expanded and the longest match of pattern against its value is replaced with string.