Чи є спосіб використання * у пункті призначення cp, mv тощо?


2

У командному рядку Windows ви можете зробити такі дії:

  • ren *.doc *.txt
  • copy my-precious-document.doc *-backup.doc

Чи є спосіб зробити це світ Linux (включаючи OS X)? Дуже дивна річ виявити команди командного рядка, які краще працювали в DOS ...

Відповіді:


2

Не зовсім. У Windows глобус (у Windows, лише макіяж) використовується командою; у * nix, глобулювання виконується оболонкою. Ваш перший приклад вийшов би приблизно таким:

mv a.doc b.doc c.doc a.txt b.txt c.txt

Очевидно, що утиліта не має поняття, що з цим робити, і це не повинно (ігноруючи такі речі, як mvприпущення, що ви намагаєтесь перейти в каталог). Щоб виконати щось на кшталт того, що ви хочете зробити, потрібно використовувати щось подібне:

find . -name "*.doc" -print0 | xargs -0 -I {} mv {} {}.txt
# Or...
find . -name "*.doc" -exec mv {} {}.txt \;

Зручно, що у Perl також є утиліта, яка може бути використана для перейменування файлів, відповідно названих rename.

rename 's/\.txt$//' *.doc

зазвичай краще використовувати опцію -exec з find, а не передати її на xargs. xargs може задихатися, коли в назві файлу є пробіл, знайдений для нього з пошуку.
MaQleod

2
@MaQleod : -print0.
Привіт71

2

Зауважте, що є дві версії renameцього корабля з різними дистрибутивами.

Perl renameза замовчуванням в ubuntu та варіантах, на які відповів @ Hello71

Інші дистрибутиви можуть доставляти пакет util-linux-ng, де знаходиться синтаксис:

rename <from> <to> <files>

Для виконання операції в ОП команда була б

rename .doc .txt *.doc

Це замінює '.doc' у імені файлу на '.txt' для будь-яких файлів, що закінчуються на .doc

OSX не постачається з перейменуванням, але якщо у вас встановлений Perl на OSX, ви можете просто скопіювати скрипт перейменування на вашу машину OSX з установки Linux. Версія Perl набагато гнучкіша, ніж util-linux (вище). Він повинен бути в / usr / bin / перейменувати в дистрибутивах типу Ubuntu. Сценарій очікує, що Perl буде в / usr / bin / perl, тому вам може знадобитися відредагувати його, якщо він знаходиться в іншому місці на OSX


Класно. Я використовую OS X (повинен був вказати), не схоже на те, що є стандартний порт util-linux? (Або якщо такий є, я не можу це зрозуміти.)
Стів Беннетт

Я не думаю, що існує стандартний порт, хоча люди раніше вдавалися до компіляції перейменування під OSX. Однак існують додатки для OSX gui, які можуть робити масові перейменування з таким типом гнучкості
Павло

Так, але інструменти командного рядка корисні
Стів Беннетт

О, звичайно. Команда перейменування Perl - це буквально скрипт perl, тому якщо у вас встановлений Perl на OSX, ви можете просто скопіювати скрипт перейменування на вашу машину OSX. Версія Perl набагато гнучкіша, ніж util-linux. Це повинно бути в /usr/bin/rename. Він очікує, що в Perl з'явиться, /usr/bin/perlтому вам може знадобитися відредагувати його, якщо він є в іншому місці OSX.
Пол

використовувати MacPorts, пошук для «перейменувати» , є кілька варіантів на вибір; ви хочете p5-file-rename(або renameutilsне пов'язані, але, можливо, також корисні). Після встановлення macports (якщо у вас його ще немає) => sudo port install p5-file-rename.. Символьне посилання слід створити, щоб викликати сценарій як rename. (ps: справді було б дивно виявити утиліти командного рядка, які краще працювали під дос. Але тут теж не так.)
michael

1

for f in *.doc; do cp "${f}" "${f//.doc/}-backup.doc"; doneбуду працювати. Це додасть -backup.doc до кінця кожного файлу. ${f//.doc/}видалить усі .docs з початкового імені файлу, тому ви не закінчите .doc. Однак особисто, коли я роблю резервну копію, я просто додаю .bkup до імені файлу, тому, якщо я хотів створити резервну копію всіх .doc в каталозі в окрему папку резервного копіювання, я б перейшов до папки, в яку я хочу перейти, cpі зробити щось подібнеfor f in *.doc; do cp "${f}" "~/backups/${f}.bkup"; done

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