Я бы пошел по адресу https://packages.debian.org/source/
, где
- это конкретный выпуск Debian, который меня интересовал, а
- это имя пакета.
Например: https://packages.debian.org/source/stable/python-pip
Оттуда я прокрутил бы страницу вниз и загрузил сжатый tar
архивы (исходный код и дополнения Debian к этому источнику).
Если бы я не знал имя пакета, только то, что он должен содержать исполняемый файл pip
, я бы пошел на https://packages.debian.org/ и найдите «пакеты, содержащие файлы с таким именем» и введите bin / pip
в поле поиска внизу страницы.
Также можно использовать URL в следующем формате для прямого доступа к результатам поиска:
https://packages.debian.org/search?mode=exactfilename&searchon=contents&keywords=bin/pip
Предполагая, что вы находитесь в корневой папке, где находятся все каталоги для сжатия (в вашем случае /
), вы можете использовать find
вместе с командой xargs
, например
найти dir1 / -name "* .fit" -print0 | xargs -i% -r0 sh -c 'mkdir -vp "$ (dirname" / another_dir /% ")" && gzip -vc "%" | tee "/another_dir/%".gz> / dev / null && rm -v"% "'
Примечание. Вы также можете заменить | tee "/another_dir/%".gz> / dev / null
с >" /another_dir/%".gz
.
Это найдет все файлы .fit
в dir1 /
и передаст их команде xargs
для анализа, где %
заменено на каждый ваш файл.
Команда xargs
:
mkdir
) с ее p arents ( -p
) в качестве заполнителя %
) в стандартный вывод ( -c
) и перенаправляет сжатый вывод в tee
, tee
сохранит сжатый ввод в файл .gz
(поскольку tee
по умолчанию выводит ввод на экран терминала, отправка его в / dev / null
будет подавить его, но он все равно сохранит содержимое в данный файл). После успешного сжатия удалите оригинал ( rm
).Вы всегда можете удалить эту часть, чтобы удалить их вручную после проверки сжатых файлов.
Важно, чтобы вы находились в относительной папке по отношению к вашему dir1 /
, поэтому все пути, возвращаемые find
, относятся к текущей папке, поэтому вам не нужно преобразовать абсолютные пути в относительные (это все еще можно сделать с помощью realpath
, например, realpath --relative-to = $ absolute $ current
, но это только усложнит указанная выше команда).
В macOS для использования аргумента -r
для xargs
необходимо установить GNU xargs
( brew install xargs
) и используйте вместо этого команду gxargs
. Аналогично другим системам BSD.
Связанный вопрос: заархивируйте несколько файлов в разные каталоги и скопируйте в новый каталог .
Я не знаю ни одной команды для этого, но на ServerFault является примером простого сценария, который реализует то же самое. Обратите внимание, что он не сохраняет права доступа к файлам или время доступа / модификации и может иметь проблемы, если имена файлов содержат пробелы или подобное.