Вы можете использовать имена "disk/by-id" в /etc/fstab
, см.
ls -l /dev/disk/by-id
. Обратите внимание, что эти имена устройств также могут использоваться в других файлах. (конфиги initrd, grub). Таким образом, вы можете обновить конфигурацию grub и заново создать initrd.
Удаление списка этих имен с добавлением суффикса после последнего пробела:
sed 's/.* //'
Но если это пара файлов в каталоге, проще использовать переименовать
:
rename 's/^.* //' *
Другое решение с использованием вырезать
и sed
:
cat filename.txt | cut -d'-' -f2- | sed 's/^ //g'
Еще одно решение только с вырезать
(и только в том случае, если имена состоят из имени и фамилии, разделенных пробелом):
cat filename.txt | cut -d' ' -f4-
С bash
или ksh
, предполагая, что файлы находятся в текущем каталоге:
for name in ./"Nora Hmann - sub-"??.zip; do
newname="./${name##* }"
mv -i "$name" "$newname"
done
Расширение параметра $ {name ## *}
удалит все из $ name
до (включительно) последнего символа пробела .
Если имя в начале имени файла не зафиксировано, то следующий файл захватит все Zip-файлы и попытается переименовать их таким же образом:
for name in ./*.zip; do
newname="./${name##* }"
mv -i "$name" "$newname"
done
Я решил использовать mv -i
в этих примерах, так что вы должны интерактивно подтверждать любое переименование, которое приведет к перезаписи уже существующего файла.
Другой способ сделать это - просто пропустить файлы, которые в противном случае перезаписали бы существующие файлы:
for name in ./*.zip; do
newname="./${name##* }"
if [[ ! -e "$newname" ]]; then
mv "$name" "$newname"
else
printf 'Not renaming "%s", new filename exists\n' "$name" >&2
fi
done
Используйте следующую команду:
sed -ie "s / Nora \ Hmann \ \ - \ // g" stack
перед:
Nora Hmann - sub-01.zip
Nora Hmann - sub-02.zip
Nora Hmann - sub-03.zip
Nora Hmann - sub-04.zip
Nora Hmann - sub-05.zip
Nora Hmann - sub-06.zip
после:
sub-01.zip
sub-02.zip
sub-03.zip
sub-04.zip
sub-05.zip
sub-06.zip
Чтобы зациклить его (я предполагаю, что вы выполняете свой сценарий bash из каталога, где находятся все файлы, которые будут изменены):
for i in `ls -w1`
do
sed -ie "s/Nora\ Hmann\ \-\ //g" /path/to/$i
done