Как отсортировать список файлов с одинаковыми именами, но разными расширениями

Как было сказано в комментариях, я использовал информацию о видеокарте и драйвере, полученную с помощью lshw -c video , чтобы сузить область поиска.

$ls /sys/class/backlight/
ideapad
intel_backlight

Использование ideapad, которое, казалось, было системным по умолчанию, не имело никакого эффекта, но использование intel_backlight дало:

$echo 1000 | sudo tee /sys/class/backlight/intel_backlight/brightness 
1000

Я обнаружил максимальную яркость через:

$cat /sys/class/backlight/intel_backlight/max_brightness 
13046

Позже я нашел решение для получения xbacklight и, возможно, других инструментов для переключитесь на intel_backlight:

#in /etc/default/grub add acpi_backlight=vendor to GRUB_CMDLINE_LINUX_DEFAULT 
GRUB_CMDLINE_LINUX_DEFAULT="quiet acpi_osi=Linux acpi_backlight=vendor"

$sudo update-grub
1
20.10.2015, 15:00
4 ответа
mkdir -p PDF
for f in *.pdf ; do
    bn=$(basename -- "$f" .pdf)
    [ -e "$bn.doc" ] && mv -- "$f" PDF/
done

Я оставлю это на ваше усмотрение rm -rf PDF / - я предпочитаю оставлять неотменяемый шаг как можно позже в любой потенциально рискованной процедуре.

Если вы предпочитаете просто удалить их, то:

for f in *.pdf ; do
    [ -e "$(basename -- "$f" .pdf).doc" ] && rm -f -- "$f"
done

Эта версия не требует установки промежуточной переменной «$ bn» - в любом случае работает ... первая версия IMO более «читабельна» и является также лучше, если у вас есть другие варианты использования базового имени файла.

1
29.04.2021, 00:22

Try

for i in `ls | awk '{print $1}' | cut -d'.' -f1 | uniq -d`
do
   rm -r $PWD/$i".pdf"
done

Warning: Имя вашего файла должно содержать только одну точку(.) (т.е.,) finename.extension и должно выполняться в том же каталоге, если вы выполняете тот же сниппет.

0
29.04.2021, 00:22

Требуемая команда rename :

  • Если используется rename из util-linux :

     rename. _1. * .orig & & rename .orig "* .orig
    

    Первый будет заменен первым вхождением . с _ 1. для всех файлов, оканчивающихся на .orig . Второй удалит файл .orig из имен файлов.

  • Если вы используете perl-rename (по умолчанию в системах на основе Debian), все проще, так как оно использует Perl Compatible Regular Expressions, так что вы можете сделать все за один шаг:

     rename/(\.. * )\.orig/_ 1 $1/' * orig
    

    Поскольку эта версия использует регекс будет соответствовать первому . (\. , . нужно сбежать, поскольку ti означает "любой персонаж", который не сбежал), то все (. * ) до .orig . Поскольку первый шаблон находится внутри круглых скобок, он "захватывается" и впоследствии может называться $1 . Поэтому замена заменяет все, что было ранее согласовано с _ 1 и захваченным шаблоном (первым расширением), и одновременно удаляет .orig .

Команды можно объединить с найти следующим образом:

find /example -name '*.orig' -exec rename . _1. {} +
find /example -name '*.orig' -exec rename .orig '' {} +

Или

find /example -name '*.orig' -exec rename 's/(\..*)\.orig/_1$1/'

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

shopt -s globstar                               ## make ** recurse into subdirectories
rename.ul . _1. **.orig && rename.ul .orig '' **.orig  ## util-linux
rename  's/(\..*)\.orig/_1$1/' **orig                  ## perl rename

На самом деле, строго говоря, вам даже не нужно переименовать . Можно сделать все в оболочке (см. здесь для объяснения возможностей манипуляции строками оболочки):

for file in **/*.orig; do 
    newname="${file%%.*}_1.${file#*.}"
    mv "$file" "${newname/.orig/}"
done

Наконец, заметка на глобусах ( -имя использует глобус, а не регулярное выражение ). *. * .orig - это синтаксис Windows glob для "всего, что оканчивается на .orig ". Эквивалент и то, что следует использовать с найти - * .orig . Только * соответствует любому, при использовании *. * .orig имена файлов будут совпадать только с двумя расширениями, последним из которых является .orig .

-121--166227-

Если требуется что-то простое, неблокирующее, добавьте в/etc/rc.local следующее:

( sleep 60 && /path/to/command_or_script [opts] ) &
-121--66271-

Нет смысла "сортировать" папку для удаления файлов. Можно выполнить сортировку по именам файлов с помощью ls -bU | sort или обработать список для удаления нежелательных файлов.

  1. Удалите все PDF-файлы, для которых существует DOC

     для d в * .doc; do p = "$ {d/% .doc/.pdf}"; test -f "$ p" & & rm -f "$ p"; готово
    
  2. Удаление всех PDF-файлов

     rm -f * .pdf
    

Оба варианта обрабатывают имена файлов пробелами и другими странными символами в них. Протестировать решения можно путем замены rm на echo rm .

0
29.04.2021, 00:22

С помощью zsh:

doc_base=(*.doc(:r)) && rm -f -- $^doc_base.pdf

Или:

setopt histsubstpattern # could go in ~/.zshrc
rm -f -- *.doc(:s/%doc/pdf)

Чтобы удалить все файлы pdf, если есть файл с тем же именем, но другим расширением (doc или другим):

setopt histsubstpattern extendedglob
rm -f -- *.*~*.pdf(:r:s/%/pdf)
0
29.04.2021, 00:22

Теги

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