У меня есть несколько файлов в следующем каталоге:/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/*