Переименовать все файлы в каталоге с сохранением любого расширения файла

(Датированный!) книга "Драйверы устройств Linux" Corbet, Rubini и Kroah-Hartman имеет драйвер в качестве примера, который просто выделяет область постоянной памяти для того, чтобы дурачиться. Не файловая система, но...

2
20.10.2015, 10:11
3 ответа

Если вы хотите сравнить производительность компиляторов, существует множество тестов.

Будьте осторожны, компилятору, безусловно, выгодно давать «хорошие» результаты эталона, поэтому известно, что компиляторы добавили «оптимизации», которые вредят реальному использованию, чтобы получить лучшие эталоны (возможно, добросовестно; бенчмаркинг прост, релевантные данные реального использования очень трудно получить), или даже обнаружить бенчмарк и срезать углы. Не обвиняя GCC или LVM здесь, просто сравнивайте с лопатой соли. Кроме того, бенчмарк - это ограниченный набор программ для компиляции/запуска, если ваше использование существенно отличается от бенчмарка, результаты будут бессмысленны для вас.

В конце концов, если только ваше приложение не будет активно запущено (т. е. очень долго работает на вашей машине, часто работает на сотнях машин, и производительность имеет решающее значение), получение «самой быстрой программы» совершенно не имеет значения (просто посмотрите, сколько ваших команд Linux sysadmin написано, например, на Python, который является хорошим языком, но, безусловно, не имеет записи скорости; или сколько программного обеспечения «реального использования» разрабатывается в компилируемом байтами Java или .Net). Ваше время в качестве разработчика/средства устранения неполадок намного ценнее времени компьютера, за исключением экстремальных обстоятельств. Я бы оценил компилятор по (а) надежности (если он сбивает или неправильно компилирует мой код, я буду зол), (б) соответствию стандартам (может быть «bug-and extension-compatible to GCC du jour», не строго «standard», если вы хотите скомпилировать или связать с программным обеспечением, разработанным другими), (в) удобным для пользователя сообщениям об ошибках, даже (d) скорости компиляции Производительность генерируемого кода, если она даже принимается во внимание, гораздо позже.

-121--243240-

Если на брандмауэре открыты нужные порты, можно подключить и получить доступ к общей папке cifs/smb через Интернет. Просто посмотрите на общий ресурс SMB, открытый на\live.sysinternals.com\Tools, например.

Никогда не следует открывать samba для ненадежной сети, поскольку множество вредоносных программ и средств infosec могут использовать SMB в качестве вектора атаки. Из-за этого действительно следует использовать sftp с chroot jails, fail2ban и pubkey только аутентификации.

Честно говоря, я настоятельно рекомендую изучить использование iscsi luns или nfsv4 и ipsec для доступа к удаленному месту хранения через защищенную VPN вместо использования samba.

-121--118826-

Вот решение с использованием php на основе этого ответа . Создайте файл, например, myrename.php со следующим содержимым:

<?php
$test = 1;
if(!chdir('/tmp/mydir')) echo "failed chdir\n";
else if ($handle = opendir('.')) {
    while (false !== ($fileName = readdir($handle))) {
        $newName = preg_replace("/\.(jpg|gif|png)$/i","-img4sm.\\1",$fileName);
        if($newName!=$fileName){
            if($test){
                echo "$fileName -> $newName\n";
            }else{
                if(!rename($fileName, $newName))echo "failed $fileName -> $newName\n";
            }
        }
    }
    closedir($handle);
}
?>

замените /tmp/mydir путем к каталогу. Запустите сценарий с

php myrename.php

и распечатает старое имя файла и новое имя файла для каждого соответствующего файла. Если это нормально, измените $ test = 1; на $ test = 0; и запустите его по-настоящему. Не забудьте сначала создать резервную копию файлов в случае возникновения проблем.

0
27.01.2020, 21:59

С zsh :

autoload zmv # best in ~/.zshrc
zmv -n '(*).(png|jpg|gif)' '$1-mg4sm.$2'

Удалите -n , чтобы это сделать.

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

for file in *.png *.jpg *.gif; do
  echo mv -i -- "$file" "${file%.*}-mg4sm.${file##*.}"
done

(удалите echo , чтобы это сделать).

2
27.01.2020, 21:59

К сожалению, переименование означает разные вещи в разных версиях Unix. В частности, в Fedora и, следовательно, CentOS, я полагаю, rename будет принимать только простые строки, а не выражение perl, которое вы используете (которое будет работать в debian).

Однако, похоже, все, что вам нужно сделать, это добавить «-img4sm». перед суффиксами .jpg, .png и .gif, поэтому с вашей версией переименования попробуйте:

rename -- .jpg -img4sm.jpg *.jpg
rename -- .png -img4sm.png *.png
rename -- .gif -img4sm.gif *.gif

Всегда копируйте куда-нибудь свой каталог в качестве резервной копии на случай, если эти команды не работают так, как вы ожидаете.


При желании вы можете установить более сложный perl скрипт переименовать из cpan с помощью команды cpan , если вы уже знаете это, или просто загрузив ссылку на этой странице на tar для загрузки . Распакуйте tar и «соберите» скрипт с

tar xf rename-1.9.tar.gz
cd rename-1.9
perl Makefile.PL 
make
mv bin/rename ~/bin/prename

, где последний mv находится в некотором частном каталоге bin в вашем PATH. Используйте имя prename , чтобы избежать путаницы с уже имеющейся у вас командой переименования. Затем вы можете использовать это для выполнения своих действий, например:

prename -n  's/\.(jpg|png|gif)$/-mg4sm.$1/' -- *.{jpg,gif,png}

где здесь -n означает просто показать, что произойдет, не делая этого.

2
27.01.2020, 21:59

Теги

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