Я хочу удалить первые 8 символов в имени 322 файла - PullRequest
0 голосов
/ 24 мая 2018

У меня 322 файла, и все они начинаются с "533682 - " (это то, что я хочу удалить из них). Я использую этот скрипт, но он не работал:

for file in 533682*
do 

    mv $file $(echo $file | sed -e 's/^........//')

done

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

С помощью отдельной команды Perl rename:

rename 's/^.{8}//' 533682*
0 голосов
/ 24 мая 2018

Вот решение с использованием find и mv:

find . -name "533682*" -execdir bash -c 'mv "$0" "${0:9}"' {} \;

Итак, рекурсивно:

533682 - somefile

Становится:

somefile
0 голосов
/ 24 мая 2018

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

#!/bin/bash
for file in 533682*;
do
    mv "$file" "$(echo "$file" | sed -e 's/^........//')"
done

Вы также можете использовать встроенный оператор подстроки оболочки вместоsed.

mv "$file" "${file:8}"

Как правило, всегда цитирует ваши переменные.Оставляйте их без кавычек только тогда, когда у вас есть веская причина.

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