Каков наилучший способ переименовать набор файлов с помощью регулярных выражений? - PullRequest
0 голосов
/ 13 января 2012

У меня есть каталог с полным именем файла: "file1.mp4.mp4 file1.mp4.mp4 file1.mp4.mp4 ...".

Я хотел бы переименовать все из них, используя find from"file1.mp4.mp4" to "file1.mp4" и некоторые другие инструменты bash будут выглядеть примерно так, но с регулярным выражением:

find.-name "* .mp4" | xargs echo -0

Ответы [ 5 ]

2 голосов
/ 13 января 2012

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

rename 's/\.mp4.mp4$/.mp4/' *.mp4.mp4

В противном случае вы можете захотеть что-то вроде:

rename 's/\.mp4.mp4$/.mp4/' `find . -name "*.mp4.mp4"`

Также, чтобы увидеть, что произойдет, когда вы запуститеrename, просто чтобы отладить оператор, сделайте это:

rename --no-act 's/\.mp4.mp4$/.mp4/' *.mp4.mp4

Это даже работает, если имя файла содержит пробел, например:

$ touch foo.mp4.mp4
$ touch "bar baz.mp4.mp4"
$ ls
bar baz.mp4.mp4  foo.mp4.mp4
$ rename  's/\.mp4.mp4$/.mp4/' *.mp4.mp4
$ ls
bar baz.mp4  foo.mp4
$ 
2 голосов
/ 13 января 2012

Или попробуйте эту простую команду bash в цикле?

mv /path/to/file.{mp4.mp4, mp4}
1 голос
/ 13 января 2012

Попробуйте что-то вроде этого -

for file in /path/to/dir/*.mp4; do 
    mv "$file" "${file%.*}"; 
done
0 голосов
/ 13 января 2012
find . -name '*.mp4.mp4' -exec echo mv {} \`dirname {}/\`/\`basename {} .mp4\` \; > mp4.sh && ./mp4.sh && rm mp4.sh
0 голосов
/ 13 января 2012

Есть ли у вас команда rename?Если это так, вы можете попробовать:

rename .mp4 "" *.mp4.mp4

Это позволит удалить окончательный суффикс .mp4 из всех файлов с расширением .mp4.mp4 в текущем каталоге.

...