Як змінити ім'я файлу, що містить ":" в інформації про час


2

Я вивчаю команди Linux.

Під час перейменування імені файлу з інформацією про час, :автоматично призначаються позначки. як я можу змінити цей :знак _?

Нижче наведено приклад імені файлу. Він був оновлений інформацією про час. як назвати його заміною :на _?

ee_Sun_Aug_11_22:20:27_GMT-8_2019.txt

Крім того, чому внизу не вийшло?

$ cp /var/log/ee.txt ee_`date`.txt
cp: target `2019.txt' is not a directory

Відповіді:


6

Щоб перетворити цикл на всі файли в поточному каталозі, що містять принаймні один :символ у своєму імені і закінчується на .txt, і змінити :символи на _оболонки ksh93, zsh, bash, mksh (або останні версії zasedbox sh), ви можете використання

for name in ./*:*.txt; do
    newname=${name//:/_}
    mv -i "$name" "$newname"
done

або, коротше,

for name in ./*:*.txt; do
    mv -i "$name" "${name//:/_}"
done

Підстановка параметра ${name//:/_}змінила б усе :в _будь-якому місці значення $name(оператор ksh93 також підтримується згаданими вище оболонками).

Файл mv -iбуде перейменований, але попросить підтвердження, якщо нове ім'я вже прийняте.

Ім'я файлу, яке ви показуєте як приклад, буде змінено на ee_Sun_Aug_11_22_20_27_GMT-8_2019.txt.


Ваша команда

cp /var/log/ee.txt ee_`date`.txt

не працює, оскільки dateвиводить рядок з пробілами в ньому. Пробіли могли б cpподумати, що ви хочете скопіювати кілька файлів у каталог. Отже, помилка "не каталог".

Наступне працювало б краще:

cp /var/log/ee.txt "ee_$(date).txt"

Це працює краще, не тому, що я змінив ваші підставки, $(...)а тому, що я двічі цитував нову назву.

Це створило б файл ee_Sun Aug 11 16:57:37 CEST 2019.txt(або щось подібне).

Щоб отримати акуратне ім'я файлу, ви можете dateтрохи детальніше вказати вихідний формат :

cp ee.txt "ee_$(date +"%F_%H-%M-%S").txt"

Рядок формату %F_%H-%M-%Sбуде описаний у strftime(3)посібнику на вашій системі ( man 3 strftime) або в посібнику для dateкоманди, і ви отримаєте назву файлу типу ee_2019-08-11_16-59-55.txt. Якщо ваша dateне підтримує %Fдирективу, її можна замінити на %Y-%m-%d.

Крім того,

cp ee.txt "$(date +"ee_%F_%H-%M-%S.txt")"

(дозволяючи dateкомандному формату виконати більшу частину роботи зі створення нового імені файлу)


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