Я предполагаю, что имена файлов соответствуют шаблону author - name.pdf
и что и author
, и name
могут содержать любой допустимый символ, кроме -
, окруженного пробелами.
find. -type f -name '* - *.pdf' \
-execdir sh -c 'b=${1% - *}; e=${1#* - }; mv "$1" "${e%.pdf} - $b.pdf"' sh {} \;
Это находит все обычные файлы в текущем каталоге, имена которых соответствуют шаблону * - *.pdf
.
Для каждого такого файла выполняется подоболочка. Подоболочка делает следующее:
b=${1% - *} # pick out the start of the filename
e=${1#* - } # pick out the end of the filename
# Combine $b and $e into a new filename while removing ".pdf" from
# the end of the original filename and adding it to the end of
# the new filename instead.
mv "$1" "${e%.pdf} - $b.pdf"
Проверка:
$ ls -l
total 0
-rw-r--r-- 1 kk wheel 0 Aug 30 11:31 arr! - Boaty McBoatface.pdf
-rw-r--r-- 1 kk wheel 0 Aug 30 11:30 hello world - bingo-night!.pdf
$ find. -type f -name '* - *.pdf' -execdir sh -c 'b=${1% - *}; e=${1#* - }; mv "$1" "${e%.pdf} - $b.pdf"' sh {} \;
$ ls -l
total 0
-rw-r--r-- 1 kk wheel 0 Aug 30 11:31 Boaty McBoatface - arr!.pdf
-rw-r--r-- 1 kk wheel 0 Aug 30 11:30 bingo-night! - hello world.pdf
При повторном запуске имена вернутся к исходным.
В корневом каталоге .bashrc
проверьте содержимое /proc/self/loginuid
и задайте пользовательскую переменную PS1
, только если она совпадает с вашим UID.