Перейменуйте знак запитання (?) У назви файлів


2

За допомогою renameнього можна масово змінити імена файлів. Мені вдалося позбутися всіх за +допомогою цієї команди та замінити їх підкресленнями:

rename 's/\+/_/g' * 

Я міг би змінити звичайні букви, як на "А".

rename 's/a/A/g' *

але я не зміг перейменувати це ?, не так /\?і не так /?.

Чи є спосіб звернутися до "?" у імені файлу? Більшість програм FTP також не перейменовують файли ?. Повноч командир не вдається. Єдиний спосіб, який я виявив, що працює до цих пір, це:

mv ?myfile.txt myfile.txt

але ця команда недостатньо гнучка. Я вважаю за краще перейменувати всі ?у всіх файлах.


3
Я можу видаляти файли з правдою ?без проблем - просто цитую їх як rm "?.txt". Ви впевнені, що це насправді ?? Може бути, якийсь двійковий символ відображається вашою оболонкою як ??
mvp

3
Чи можете ви вказати, який саме renameінструмент ви використовуєте ( rename --version)? Є кілька різних renameреалізацій там.
Адріан Фрюхвірт

Чи можете ви надати детальніше про те, як виглядають ці імена файлів? наприклад, чи завжди невідомі символи знаходяться на початку імені файлу?
ForeverWintr

Відповіді:


5

Як щодо цього:

for filename in *
do 
    if [ "$filename" == *"?"* ] 
    then
        mv "$filename" "$(echo $filename | tr '?' '-')" 
    fi
done

Або як один вкладиш:

for filename in *; do mv "$filename" "$(echo $filename | tr '?' '-')" ; done

Однак, схоже, ваша проблема полягає не в тому, що у ваших іменах файлів є знаки питання, а в тому, що ваші імена містять символи, які lsне розпізнаються.


Дякую за швидку відповідь. це баш сценарій? Я спробував це як ubuntu bash, і це нічого не змінило: #! / Bin / bash для імені файлу в $ (ls | grep?) Do mv $ filename $ (echo $ filename | tr '?' '-') зроблено
Morton

ще одне, що може бути важливо: якщо я перерахую каталог із "ls" the? у файлі файлів відображається так:?% 84nderung.pdf, але якщо я використовую "dir", він відображається так: \ 303% 84nderung.pdf Я знаю, що вся проблема походить від поганого перетворення UTF-8. Але, можливо, мені доведеться шукати "\ 303" замість "?"
Мортон


3

Це некрасиво, але ось це, один вкладиш, що використовує Python:

python -c 'import os, re; [os.rename(i, re.sub(r"\?", "-", i)) for i in os.listdir(".")]'

Що стосується очищення назв файлів, можливо, це допоможе вам:

python -c 'import os, re; [os.rename(i, unicode(i, "utf-8", "ignore")) for i in os.listdir(".")]'

0

Це може бути зайвим, але, використовуючи скрипт bash за посиланням у цій відповіді, ви можете перейменувати ім’я файлу з будь-якими символами в ньому, включаючи знаки питання, нові рядки, багатобайтові символи, пробіли, тире та будь-який інший допустимий символ:

https://superuser.com/a/858671/365691

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.