Вопрос

I have a list of files like so :

10_I_am_here_001.jpg
20_I_am_here_003.jpg
30_I_am_here_008.jpg
40_I_am_here_004.jpg
50_I_am_here_009.jpg
60_I_am_here_002.jpg
70_I_am_here_005.jpg
80_I_am_here_006.jpg

How can I rename all the files in a directory, so that I can drop ^[0-9]+_ from the filename ?

Thank you

Это было полезно?

Решение

Using pure BASH:

s='10_I_am_here_001.jpg'
echo "${s#[0-9]*_}"
I_am_here_001.jpg

You can then write a simple for loop in that directory like this:

for s in *; do
    f="${s#[0-9]*_}" && mv "$s" "$f"
done

Другие советы

Using rename :

rename 's/^[0-9]+_//' *

Here's another bash idea based on files ending .jpg as shown above or whatever> VonBell

#!/bin/bash
ls *.jpg |\
while read FileName
do
    NewName="`echo $FileName | cut -f2- -d "_"`"
    mv $FileName $NewName
done

With bash extended globbing

shopt -s extglob
for f in *
do
   [[ $f == +([0-9])_*.jpg ]] && mv "$f" "${f#+([0-9])_}"
done
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top