1

У меня есть 42000+ Project Gutenberg epubs. Часто релиз имеет версию с изображениями и без изображений. Я хочу удалить копии без изображения, если есть копия изображения.

...
pg16045-images.epub
pg16045.epub
pg506.epub
...

В этом случае я хотел бы удалить pg16045.epub, потому что pg16045-images.epub существует, но не pg506.epub, поскольку pg506-images.epub не существует.

Как я могу сделать это из командной строки? Я использую оболочку TCSH, но при необходимости могу переключиться на BASH.

4 ответа4

1

Это рекурсивно удаляет все файлы epub в /somewhere если у них есть соответствующий файл -images .

find /somewhere -name '*-images.epub' -exec bash -c '
    f="${0//-images/}"
    [[ -f "$f" ]] && echo rm -- "$f"
' {} \;

Удалите echo когда вы уверены, что это правильно.

0

Это, возможно, немного короче:

 find /path/to/target/directory -name '*images.epub' -exec sh -c ' echo '{}' | sed 's/-images//' | xargs  echo rm -f  ' \;
0

Это должно делать свое дело

DIR="/home/xyzuser/testdir"
for i in $(ls "$DIR");
do
  if [[ "$i" == *.images.epub  ]]
  then
    var=${i%.*}
    var=${var%.*}
    if [[ -f "$DIR/$var.epub" ]]
    then
      rm "$DIR/$var.epub"
    fi
  fi
done

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

chmod +x filename.sh
, В противном случае вы не сможете его запустить. Что это делает в основном.
  1. Перебирает все файлы (имя)
  2. Если у файла есть «images.pub», он вырезает часть «.images.epub» из его имени.
  3. Затем он проверяет, имеет ли какой-либо файл с суффиксом «.epub» (конечная часть) текущий префикс текущего файла «.images.epub» (начальная часть). И если найден, он удаляет его.
0

Он найдет все ваши файлы -images.epub и попытается удалить соответствующий каталог .epub, не проверяя, существует он или нет.

#!/bin/sh   

for d in *-images.epub ; do
  rmname=`echo "$d" | sed -e 's/\(.*\)-images\(\.epub\)/\1\2/'`
  echo rm "$rmname"
done

# end of file.

Удалите «echo» из начала строки, чтобы это на самом деле работало. Хорошая идея - сначала вывести команды на терминал и посмотреть, действительно ли это то, что вам нужно, прежде чем делать подобные вещи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .