Как изменить символическую ссылку (, рассматриваемую как текстовый файл ), на содержимое этого текстового файла (, т.е. «удалить бит символической ссылки» )?

Одной из альтернатив может быть использование rename - Perl extension for renaming multiple files.

Чтобы перевести все имена файлов в нижний регистр:rename 'y/A-Z/a-z/' *

Если вы не хотите устанавливать это, вы можете просто:

for item in *; do
  mv "$item" "${item,,}" 
done
1
19.08.2021, 17:53
1 ответ

Я не совсем уверен, хотите ли вы исправить символические ссылки или заменить их текстовыми файлами. Это решение заменяет символические ссылки текстовыми файлами :

.
find -type l -exec bash -c '
    for f in "$@"
    do
        t=$(readlink "$f")
        rm -f "$f"
        printf "%s\n" "$t" >"$f"
    done
' _ {} +

Вы можете протестировать неразрушающий -, удалив rmи изменив printfтак, чтобы он записывал "$f.tmp.txt"вместо "$f". (Не забудьте потом удалить .tmp.txtтекстовые файлы.)

Если вы хотите заменить \rна \nдля удобства чтения, вы также можете сделать это:

printf "%s\n" "${t//'$'\r/\n''}" >"$f"     # non-POSIX
printf "%s\n" "$t" | tr "\r" "\n" >"$f"    # POSIX
1
20.08.2021, 10:26

Теги

Похожие вопросы