Как удалить определенную строку из имени файла?

Как удалить определенную строку из имени файла?

У меня есть несколько файлов в следующем каталоге:/var/lib/jenkins/bin/

-rwxr-xr-x. 1 root root 4430846 Apr 27 09:45 01-DSP-04.12_03_crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:45 01-FL4-04.12_02-crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:45 01-FL8-04.12_02-crc.bin
-rwxr-xr-x. 1 root root 1659036 Apr 27 09:46 01-FPGA-04.12_02-crc.bin
-rwxr-xr-x. 1 root root  524328 Apr 27 09:46 01-MMI-04.11_05-crc.bin
-rwxr-xr-x. 1 root root   27692 Apr 27 09:46 01-PIC-04.11_06-crc.bin

Также у меня есть скрипт, который выполняет некоторую работу в /var/lib/jenkins/scripts/my_script.sh.

Я хочу удалить начальные "01-" из имен файлов этого скрипта. Есть ли хороший способ сделать это?

Я попробовал решение изhttps://stackoverflow.com/questions/28305134/удалить-первые-n-символов-из-группы-имен-файлов-с-вырезаниемно не работают на меня.

Я получаю такой вывод:

Команда

$ for file in /var/lib/jenkins/bin/*; do echo mv $file `echo $file | cut -c4-`; done

Выход

mv /var/lib/jenkins/bin/01-DSP-04.12_03_crc.bin r/lib/jenkins/bin/01-DSP-04.12_03_crc.bin
mv /var/lib/jenkins/bin/test.sh r/lib/jenkins/bin/test.sh

Как вы видите, он удаляет первые 3 символа, которые являются именем каталога, а не именем файла. Я хочу удалить 3 символа после 21 символа из имени файла.

Есть ли лучший способ сделать это?

решение1

Проблема в том, что вы используете полный путь, который включает в себя каталог. Самый простой способ обойти это — сначала перейти cdв целевой каталог, а затем запустить forцикл:

cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "$(echo "$file" | cut -c4-)"; done

Или, используя собственный интерфейс оболочкиманипуляция строкамиспособности:

cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "${file#????}"; done

В качестве альтернативы, если у вас есть perl-rename (вызывается renameв системах на базе Debian, perl-renameв других), вы можете сделать следующее:

rename -n 's|.*/...||' /var/lib/jenkins/bin/*

Убедившись, что это работает, удалите , -nчтобы действительно переименовать.


Однако, как отметил Сандип в комментариях, если вы хотите удалить только 01-, то удалите конкретно это:

rename -n 's|.*/01-||' /var/lib/jenkins/bin/*

Связанный контент