2017-02-09 9 views
0

В Linux У меня есть папка со следующей структурой:Multiple и рекурсивные переименование файлов в Баше

. 
├── a 
│   ├── 00000400000000030bfd.dat 
│   ├── 10000400000000030bfd.dat 
│   ├── 20000400000000030bfd.dat 
│   ├── etc.... 
├── b 
│   ├── 00000401000000030bfd.dat 
│   ├── 10000401000000030bfd.dat 
│   ├── 20000401000000030bfd.dat 
│   ├── etc.... 
├── c 
│   ├── 00000402000000030bfd.dat 
│   ├── 10000402000000030bfd.dat 
│   ├── 20000402000000030bfd.dat 
│   ├── etc.... 
├── d 
│   ├── etc.... 
├── e 
│   ├── etc.... 
├── f 

И так далее, пока в папке "p". Я хочу переименовать каждый файл .dat в каждом каталоге в файл .html с помощью сценария bash. Как я могу это сделать?

+0

Что вы пытаетесь для себя? Как вы потерпели неудачу? – Inian

+0

Я пробовал с 'for i в 'ls -lR' do mv $ i $ i.html; done' и др. – FelixFrog

ответ

2

Используйте петлю.

for file in {a..p}/*.dat ; do 
    mv "$file" "${file%.dat}.html" 
done 

${file%.dat} удаляет .dat из конца значения $file.

+0

Одиночный цикл над 'для файла в [a-p]/*. dat'? Или даже '{a..p}/*. Dat', чтобы избежать проблем с локальностью. –

+0

Извините, просто увидел, что вы на самом деле это упоминаете. Я думаю, что для циклов освобождаются максимальная длина строки командной строки: 'touch {000001..1000000}' дает слишком длинный список аргументов "; 'для f в {000001..1000000}; коснитесь $ f; сделано' работает хорошо. –

+0

@BenjaminW .: ОК, обновлено. Кажется, что различие на самом деле состоит из команд и ключевых слов против внешних команд. – choroba

0

Вот версия, которая использует все традиционные команды:

find log -name "*.dat" | 
    sed 's/.log$//;s/mv &.dat &.html/' | 
    bash 

По существу, find создает список целевых имен, то sed делает имена родовым, а затем генерирует mv команду, которая делает переименование, а затем трубы результаты до bash для выполнения.

Команда bash может быть опущена, чтобы просто получить список команд mv для тестирования на глаз. Вы также можете добавить -x в команду bash, чтобы получить журнал каждой команды mv.

 Смежные вопросы

  • Нет связанных вопросов^_^