2

Пример сценария:

У меня есть несколько файлов, заканчивающихся на .torrent и я хотел бы переместить их в папки с одинаковыми именами.

Например, приведены следующие файлы:

abc.torrent
def.torrent
some files has spaces.torrent
or [special] (characters).torrent
or . (dots).torrent
xyz.torrent

Я хотел бы переместить их в соответствующие папки (если они есть), которые имеют точно такое же имя, например:

  • abc.torrent переходит в abc/
  • def.torrent переходит в def/
  • и так далее

Если папка не существует, файл должен остаться нетронутым (так как это может относиться к неполной загрузке).

Я считаю, что у BitTorrent нет таких опций. Если так, я хотел бы найти некоторую командную строку для достижения этой цели.

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

Есть идеи?

2 ответа2

3

Так как я не мог найти такую опцию в OS X версии BitTorrent, я написал следующую строку:

find . -name "*.torrent" -exec sh -c 'DST=$(find . -type d -name "$(basename "{}" .torrent)" -print -quit); [ -d "$DST" ] && mv -v "{}" "$DST/"' ';'

Будет выполнен поиск файлов .torrent в текущем каталоге (.) И найдены папки (DST) с тем же именем, которые рекурсивно находятся в той же папке (.). Чтобы проверить наличие разных каталогов, измените точки (.) На соответствующие пункты назначения. Смотрите полный скрипт: mv_torrents.sh.

3
  • Нерекурсивно:

    for t in *torrent; do [ -d "${t%.*}" ] && mv "$t" "${t%.*}"; done 
    

    Синтаксис ${var%pattern} удаляет самое короткое совпадение pattern с конца переменной. В этом случае он просто удаляет расширение.

  • Рекурсивно (используя bash):

    shopt -s globstar
    for t in **/*torrent; do [ -d "${t%.*}" ] && mv "$t" "${t%.*}"; done
    

    Опция globstar позволяет ** сопоставлять любые файлы и 0 или более каталогов. Обратите внимание, что приведенное выше предполагает, что целевой каталог будет подкаталогом родительского каталога торрент-файла. Итак, если файл находится в каталоге foo/bar/baz.torrent , он будет перемещен в файл foo/bar/baz/baz.torrent .

  • Не рекурсивно, создание каталога, если отсутствует:

    for t in *torrent; do mkdir -p "${t%.*}"; mv "$t" "${t%.*}"; done 
    

    Опция -p указывает mkdir на отсутствие ошибок, если каталог уже существует, и при необходимости создавать родительские каталоги. Итак, mkdir -p foo/bar/baz также создаст каталоги foo и bar если они не существуют.

  • Рекурсивно, создание каталога, если отсутствует:

    shopt -s globstar
    for t in **/*torrent; do mkdir -p "${t%.*}"; mv "$t" "${t%.*}"; done
    

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