Добавить текст в имена файлов, которые не содержат точки

Теперь откройте его с помощью MsgViewer http://sourceforge.net/projects/msgviewer/

wget http://sourceforge.net/projects/msgviewer/files/latest/download
mv download MSGViewer.zip 
unzip MSGViewer.zip
cd MSGViewer-1.9
java -jar MSGViewer.jar

, просто перетащите файл msg в окно программы, чтобы отобразить его содержимое.

1
задан 17 June 2014 в 11:00

4 ответа

В bash вы можете использовать расширенные оболочки оболочки, например

for file in path/to/files/!(*.*); do echo mv "$file" "$file.html"; done

(удалите echo, как только вы подтвердите, что он соответствует правильному шаблону). Если расширенное globbing еще не включено, вы можете включить его с помощью shopt -s extglob.

Другим вариантом является использование функции rename на основе perl с регулярным выражением, которое исключает литерал .

[ f2]

(удалите опцию n, как только вы подтвердите, что она соответствует правильному шаблону).

6
ответ дан 24 May 2018 в 07:37
  • 1
    Команда for file in path/to/files/!(*.*); do echo mv "$file" "$file.html"; done также переименовывает каталоги. – Avinash Raj 22 May 2014 в 08:24

Мои предпочтения в таких случаях, как mmv. Он не установлен по умолчанию в Ubuntu, но вы можете установить его с помощью команды sudo apt-get install mmv.

В вашем случае вам нужно использовать его два раза:

Переименуйте все файлы из текущего каталога добавив .html в конец каждого имени файла:
mmv -v '*' '#1.html'
Повторно переименуйте (назад) все файлы, которые ранее были в их именах один или несколько . (точки):
mmv -v '*.*.html' '#1.#2'

Или , в одной строке:

mmv -v '*' '#1.html' && mmv -v '*.*.html' '#1.#2'

-v опция не является обязательной. Я использую его только для подробного вывода, потому что без него mmv выполняет действия молча.

Для получения дополнительной информации см. [F10].

2
ответ дан 24 May 2018 в 07:37

С помощью команды переименования Perl (prename) вы можете добавить условие, что имя файла должно содержать точку. Если фрагмент Perl не изменяет имя файла, этот файл остается нетронутым. Вот несколько способов написать это:

prename '/\./ or s/$/.html/' *
prename 's/$/.html/ unless /\./' *
prename '$_ .= ".html" unless /\./' *
prename '$_ = "$_.html" unless /\./' *
prename 'if (!/\./) {$_ = "$_.html"}' *
1
ответ дан 24 May 2018 в 07:37

Ответы прекрасны, я также даю вам другую команду, которая выполняет эту работу:

ls -1 | grep -v "\." | awk '{print "mv "$0" "$0".html"}' | sh

Некоторое объяснение:

ls - list directory contents

 -1     list one file per line

grep prints the matching lines.

-v, --invert-match
              Invert the sense of matching, to select non-matching lines.  (-v
              is specified by POSIX.)

Awk is mostly used for pattern scanning and processing. It searches one or more files to see if they contain lines that matches with the specified patterns and then perform associated actions.

ПРИМЕЧАНИЕ:

[d3 ] Я пробую ваш сценарий, и команда выполнит задание.

-2
ответ дан 24 May 2018 в 07:37
  • 1
    Это приводит к ошибкам в именах файлов, содержащих любые типы пробелов (пробелы, табуляции, строки перевода и т. Д.). Как правило, вы никогда не должны разбирать ls . – terdon♦ 19 May 2014 в 05:11
  • 2
    Thath right terdon благодарит за ваш комментарий, но как я могу решить это в той же команде – nux 19 May 2014 в 05:15
  • 3
    Ты не можешь. Существует почти нет безопасного пути для разбора ls. Если вы действительно хотите это сделать, используя awk и sh, попробуйте что-то вроде printf "'%s'\n" -- !(*.*) | awk '{print "mv -- "$0" "$0".html"}' | sh. Это все равно будет разбивать имена файлов на новые строки, но, по крайней мере, оно может иметь дело с пробелами. [F4] необходим для случаев, когда имена файлов начинаются с -. – terdon♦ 19 May 2014 в 05:23

Другие вопросы по тегам:

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