Изменение расширения нескольких файлов в Ubuntu 12.04

Как видно из заголовка, как я могу изменить расширение каждого файла в каталоге в Ubuntu? Я видел несколько примеров использования переименования и т. Д., Но я получаю сообщение об ошибке (Невозможно найти переименование пакета), и он не доступен через apt-get.

Кроме того, я на самом деле не знаю, оригинальный тип файла! Это данные, которые были скопированы из файловой системы Hadoop на локальный диск, и мне нужно, чтобы они были в формате .txt.

Если это имеет значение, я запускаю Ubuntu 12.04 в Oracle Virtual Box

Редактировать: Вывод: ls -l / usr / bin / переименовать / etc / альтернативы / переименовать

amartin24@ubuntu-amartin24:~/TwitterMining/JSONTweets$ ls -l /usr/bin/*rename* /etc/alternatives/rename
ls: cannot access /etc/alternatives/rename: No such file or directory
-rwxr-xr-x 1 root root 10392 Mar 30  2012 /usr/bin/rename.ul
3
задан 16 August 2013 в 02:50

6 ответов

Вы можете cd в рассматриваемый каталог и выполнить что-то подобное:

find -L . -type f -name "*.oldextension" -print0 | while IFS= read -r -d '' FNAME; do
    mv -- "$FNAME" "${FNAME%.oldextension}.newextension"
done

Или, если файлы вообще не имеют расширения:

find -L . -type f -print0 | while IFS= read -r -d '' FNAME; do
    mv -- "$FNAME" "${FNAME%}.newextension"
done

В вашем случае вам придется заменить newextension на txt .

Кто-то, более опытный в bash, может лучше разобраться с этим. Пожалуйста, не стесняйтесь редактировать мой ответ в этом случае.


Исходное описание:

1) Он будет переименовывать только расширение файла (из-за использования $ {FNAME% .so} .dylib ). Все остальные решения с использованием $ {X / .so / .dylib} неверны, поскольку они ошибочно переименовывают первое появление из .поэтому в имени файла (например, x.so.so переименован в x.dylib.so или того хуже, ./ libraries / libTemp.so-1.9.3 / libTemp.so переименован в ./ библиотеки / libTemp.dylib-1.9.3 / libTemp.so - ошибка).

2) Он будет обрабатывать пробелы и любые другие специальные символы в именах файлов (кроме двойных кавычек).

3) Он не будет изменять каталоги или другие специальные файлы.

4) Он будет следовать символическим ссылкам в подкаталоги и ссылкам на целевые файлы и переименуйте целевой файл, а не саму ссылку ( по умолчанию функция find обрабатывает саму символическую ссылку, а не файл, на который указывает ссылка).

Источник:

Bash переименовать расширение рекурсивно - stackoverflow , ответил aps2012 .

4
ответ дан 16 August 2013 в 02:50

Команда rename уже установлена, больше ничего добавлять не нужно.

rename принимает код Perl в качестве первого аргумента. Большинство конкретных вариантов использования переименования состоит из замены регулярного выражения: s / REGEXP / REPLACEMENT / . Чтобы удалить существующее расширение, замените все, начиная с последнего . символ.

rename 's/\.[^.]*$/.txt/' /path/to/directory/*

Если у ваших файлов нет расширения (нет . в имени), вы можете использовать $ (который соответствует концу имени файла) в качестве регулярного выражения, или добавьте к имени .txt .

rename '$_ = "$_.txt"'  /path/to/directory/*

Это не меняет содержимое файлов, а только переименовывает их. Если ваши данные не в том формате, который вам нужен, это совершенно не связанная с этим проблема.

5
ответ дан 16 August 2013 в 02:50

У меня есть этот сценарий. Я знаю, что это не пустышка, а именно при работе с файлами с пробелами. Вот почему я запускаю детокс с самого начала.

#!/bin/bash
#   detox * 
# uncomment if you want to get rid of spaces and funny characters
    script=$(basename $0)
if  [ -z "$1" ] || [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
    clear   
    echo "Script for adding an extension to files without extension"
    echo "---------------------------------------------------------"
    echo -e "\n Usage:"
    echo -e "   $script extension\n"
    echo -e "Exampli gratia: \n The command:"
    echo "      $script txt"
    echo -e "   will rename:\n      FileWithoutExtension -> FileWithoutExtension.txt\n"

else
for file in $(ls -p -I '*.*' | grep -v '/$') # excludes direcotires
    do 
    mv -iv "$file" "$file.$1"
    done
fi
0
ответ дан 16 August 2013 в 02:50

Решение с графическим интерфейсом


Обзор

В программном центре Ubuntu есть действительно простой в использовании и мощный инструмент с графическим интерфейсом для переименования пакетов файлов, pyRenamer.

Установка

sudo apt-get install pyrenamer

или

Foo
(источник: ubuntu.com )

Скриншоты

enter image description here

1
ответ дан 16 August 2013 в 02:50

Если у вас вообще есть куча файлов без расширений (например, ./out_1, ./out_2, out_3, ... ) :

cd YOUR_DIRECTORY_HERE
ls | xargs -i{} mv {} {}.YOUR_EXTENSION_HERE

пример

ls | xargs -i{} mv {} {}.md
0
ответ дан 16 August 2013 в 02:50

Я думаю, вы можете использовать этот простой сценарий bash

rename_ext_script.sh

#!/bin/bash
for file in *
do
  mv -- "${file}" "${file%.*}.txt"
done

этот сценарий работает в обоих случаях с расширением или без

2
ответ дан 16 August 2013 в 02:50

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

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