Как видно из заголовка, как я могу изменить расширение каждого файла в каталоге в 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
Вы можете 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 .
Команда rename
уже установлена, больше ничего добавлять не нужно.
rename
принимает код Perl в качестве первого аргумента. Большинство конкретных вариантов использования переименования состоит из замены регулярного выражения: s / REGEXP / REPLACEMENT /
. Чтобы удалить существующее расширение, замените все, начиная с последнего .
символ.
rename 's/\.[^.]*$/.txt/' /path/to/directory/*
Если у ваших файлов нет расширения (нет .
в имени), вы можете использовать $
(который соответствует концу имени файла) в качестве регулярного выражения, или добавьте к имени .txt
.
rename '$_ = "$_.txt"' /path/to/directory/*
Это не меняет содержимое файлов, а только переименовывает их. Если ваши данные не в том формате, который вам нужен, это совершенно не связанная с этим проблема.
У меня есть этот сценарий. Я знаю, что это не пустышка, а именно при работе с файлами с пробелами. Вот почему я запускаю детокс с самого начала.
#!/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
Обзор
В программном центре Ubuntu есть действительно простой в использовании и мощный инструмент с графическим интерфейсом для переименования пакетов файлов, pyRenamer.
Установка
sudo apt-get install pyrenamer
или
(источник: ubuntu.com )
Скриншоты
Если у вас вообще есть куча файлов без расширений (например, ./out_1
, ./out_2
, out_3
, ... ) :
cd YOUR_DIRECTORY_HERE
ls | xargs -i{} mv {} {}.YOUR_EXTENSION_HERE
пример
ls | xargs -i{} mv {} {}.md
Я думаю, вы можете использовать этот простой сценарий bash
rename_ext_script.sh
#!/bin/bash
for file in *
do
mv -- "${file}" "${file%.*}.txt"
done
этот сценарий работает в обоих случаях с расширением или без