Переименование файлов в каталоге UNIX - сценарии оболочки - PullRequest
5 голосов
/ 07 октября 2011

Я пытался написать скрипт, который будет брать текущий рабочий каталог, сканировать каждый файл и проверять, является ли он файлом .txt. Затем возьмите каждый файл (это текстовый файл) и проверьте, не содержит ли он подчеркивания где-либо в своем имени и позволяет ли он заменить знак подчеркивания на дефис.

Я знаю, что это высокий заказ, но вот грубый код, который у меня есть:

#!/bin/bash
count=1
while((count <= $#))
       do
          case $count in
               "*.txt") sed 's/_/-' $count
          esac
          ((count++))
done

Я думал о том, что в качестве аргументов будут приниматься файлы в текущем рабочем каталоге и проверяться каждый файл (представленный как $ count или файл в «count»). Затем для каждого файла он будет проверять, заканчивается ли он в .txt, и если он это делает, он будет менять каждое подчеркивание на дефис, используя sed. Я думаю, что одна из основных проблем, с которыми я сталкиваюсь, заключается в том, что скрипт не читает файлы из текущего рабочего каталога. Я попытался включить каталог после команды для запуска сценария, но я думаю, что она заняла каждую строку вместо каждого файла (так как в каждой строке 4 или около того файла).

В любом случае, любая помощь будет принята с благодарностью! Кроме того, мне жаль, что мой код настолько плох, что я новичок в UNIX.

Ответы [ 4 ]

2 голосов
/ 07 октября 2011
for fname in ./*_*.txt; do
  new_fname=$(printf '%s' "$fname" | sed 's,_,-,')
  mv "$fname" "$new_fname"
done
1 голос
/ 07 октября 2011

почему бы и нет:

rename 's/_/-/' *.txt
0 голосов
/ 09 октября 2011

Спасибо за ваш вклад, ребята!В целом, я думаю, что решение, которое я нашел, было наиболее подходящим для моего уровня квалификации:

ls *.txt | while read -r file; do echo file |
   mv $file $(echo $file | sed 's,_,-,');
done

Это получило то, что мне нужно было сделать, и в своих целях я не слишком беспокоюсь о местах.Но спасибо за все ваши замечательные предложения, вы все очень умны!

0 голосов
/ 07 октября 2011
$ ls *.txt | while read -r file; do echo $file | 
  grep > /dev/null _ && mv $file $(echo $file | tr _ -); done

(непроверенные)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...