Сценарий оболочки для переименования файлов - PullRequest
0 голосов
/ 30 августа 2010

Я написал небольшой скрипт оболочки на основе примера, который нашел здесь: https://bbs.archlinux.org/viewtopic.php?id=36305

, он принимает это:

bash-3.2$ ls
test 001  test 002  test 003  test 004

и превращает его в:

bash-3.2$ ls
001  002  003  004  rename.sh

Однако это дает мне эту ошибку (даже при том, что это работает):

bash-3.2$ ./rename.sh
mv: missing destination file operand after `rename.sh'
Try `mv --help' for more information.
`test 001' -> `001'
`test 002' -> `002'
`test 003' -> `003'
`test 004' -> `004'

Хотя это работает правильно, было бы хорошо видеть, где я напутал, я предполагал, что по умолчанию это поместит файлыв том же каталоге (это желаемый результат).

#!/bin/bash
ls | while read -r FILE
do
        mv -v "$FILE" `echo $FILE | awk -F ' ' '{print $2}'`
done

Заранее благодарим за помощь в исправлении моего неверного кода.

Ответы [ 3 ]

1 голос
/ 30 августа 2010

почему вы используете ls с дополнительным процессом для цикла while? Просто используйте цикл for с расширением оболочки. Это предпочтительный способ

#!/bin/bash
shopt -s nullglob
for file in *
do
  if [ -f "$file" ];then
    newfile="${file##* }"
    mv "$file" $newfile"
  fi
done
0 голосов
/ 06 мая 2019

Мне это понравилось, и он отлично меняет имена файлов.Вы можете попробовать как ниже.

mkdir /root/test; touch my\ file{1..10}

vim rename.sh

#!/bin/bash
ls /root/test| while read -r FILE
do
  mv -v /root/test/"$FILE" /root/test/`echo $FILE | awk -F" " '{print $2}'`
done

 chmod +x rename.sh
./rename.sh
0 голосов
/ 30 августа 2010

Почтальон почти есть. Для rename.sh команда awk ничего не возвращает, поэтому в действительности у вас есть следующая команда, которую пытается выполнить оболочка:

mv rename.sh

отсюда сообщение об ошибке «отсутствует файл назначения»

Вы можете исправить это, проверив имя файла скрипта, либо в жестком коде, либо в $ 0, и выполнив команду mv, только если $ FILE соответствует имени скрипта.

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