私のローカルリポジトリ 下記参照、同じパッケージの多くのバージョンをダウンロードしてdebパッケージディレクトリに保存しています。 Ubuntuは常に最新バージョンを使用することを好むため、以前のバージョンをダウンロードして使用する必要はありません。 (すべて同じフォルダーにあります)。
ローカルdebのフォルダーからパッケージの以前のバージョンを削除するにはどうすればよいですか?それらを手動で削除するのは現実的な解決策ではありません。 (数千のファイルのバージョンを調べることはできません)
何か案は?!!
たぶん、各パッケージのバージョンをチェックして新しいバージョンを保持し、古いバージョンを削除するスクリプトは、この問題を解決できます。
私はそのようなスクリプトを探しています、またはいくつかのソフトウェアが設立されたら素晴らしいでしょう
このチュートリアルの方法 に従ってローカルリポジトリを作成しました。
***ローカルリポジトリは、既にダウンロードされたパッケージのオフラインストレージであるため、再度ダウンロードする必要はありません)
注:ダウンロードしたパッケージのキャッシュをクリアすることではありません。これは、apt-get clean
コマンドで実行できます。
これに続いて、同じパッケージの古いバージョンを削除しました。 dpkg-scanpackages
の複数バージョンスキャン機能の機能の反転を使用しました。
最初にdpkg-dev
パッケージをインストールします
Sudo apt-get install dpkg-dev
次に、dpkg-scanpackages
オプションを指定せずに、パッケージの名前(新しい方のみが表示されます)-m
でファイルを生成します。デフォルトは-m
オプションなしです。
debという名前のフォルダーに.debファイルがある場合、このフォルダーの親から以下のコマンドを実行します
dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: > filenames
これにより、すべての.debファイルの名前がFilename: deb/packagename_version.deb
の形式でリストされているfilenamesという名前のファイルが作成されます。
filenamesという名前のファイルに、最新バージョンのファイル名がすべて含まれるようになりました。
タスクは簡単になりました。スクリプトを変更して、これらのファイルをすべて別のフォルダーに移動します。
最初にFilename:
をmv
に置き換えます
sed -i 's/Filename:/mv/' filenames
次に、親ディレクトリdeb folderにフォルダーを作成します。私はそれに名前を付けましたnewest(ジャンクフリーは良いものかもしれません; P)。
再度filenamesファイルを変更して、新しく作成されたnewestフォルダー内の.debファイルを移動します。
sed -i 's/\.deb/.deb newest/' filenames
これにより、filenames fileが.debファイルをdebディレクトリからnewestディレクトリに移動するmv
コマンドのリストになります
今何を推測します。ファイルを実行しますfilenames
sh filenames
最後のステップは、古い廃止された.debファイルがあるフォルダーを削除することです。予防措置として最新のフォルダも確認してください。
dpkg-dev
パッケージをインストールした後、単一のコマンドで移動スクリプトを生成し、.debファイルのフォルダーの親に移動してこのスクリプトを使用します。
dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: | sed 's/Filename:/mv/;s/\.deb/.deb newest/' > filenames
次に、newestという名前のフォルダーを作成し、 `sh filenames *コマンドでfilenamesというファイルを実行します。
私は同じ問題を抱えていました。apt-mirrorを使用してローカルリポジトリを作成し、このツールは新しいパッケージをダウンロードしますが、古いパッケージはすべてそのまま残します。ローカルミラーをクリーンアップするために、次のことを行いました。
ミラーの一番上の場所に移動します(私のセットアップの/var/spool/apt-mirror/mirror/ftp.nl.debian.org/debianでdistsとプールディレクトリが置かれているディレクトリ)
プール内のすべてのパッケージのリストを作成します。
find pool -type f | sort -u > files
ミラー化されたディストリビューションのすべてのパッケージのリストを作成します。
grep "^Filename:" `find dists/ -name Packages`|sed "s/^.*Filename: //"|sort -u > packages
次に、2つのファイルの差分を作成し、クリーンアップスクリプトに変換します。
diff files packages | sed "/^[1-9]/d;s/^< /rm /" > cleanup.sh
生成されたスクリプトを実行する
リポジトリに書き込み権限があることを確認します(またはSudoを使用して実行します)。削除する代わりに、ファイルを一時的な場所に移動することもできます。
この背後にある考え方は、Packagesファイルのいずれにも記載されていないファイルを削除できることです。これらのファイルは新しいバージョンに置き換えられるか、非推奨になります。パッケージファイルにファイルが記載されていない場合、リポジトリに接続しているクライアントはそれらを見つけることができません。
この1つのライナーは、同じパッケージの古いバージョンのみを削除します
ルートとして実行
Sudo dpkg-scanpackages /var/cache/apt/archives 2>&1 >/dev/null | grep -Po '((\/.*?deb)(?=.*?repeat;))|used that.*?\K(\/.*deb)' | xargs rm
「/ var/cache/apt/archives」は.debディレクトリに置き換えます
ubuntu 12.10で非常にうまく機能します
「Anwar」からの素敵な回避策(最初の回答)!私が変更するこの行のみ:
sed -i 's/\.deb/.deb newest/' filenames
packagename.debian_123.debという名前のパッケージがある場合、この行の最初の「.deb」のみが行に置き換えられ、最終的には次のようになります。
packagename.deb newest_123.deb
代わりに次の行を使用すると、すべての行の最後の.deb
のみが置き換えられます。
sed -i 's/\(.*\).deb/\1.deb newest/' filenames
Thunarの場合:
/var/cache/apt/archives
を開きますSudo rm /var/cache/apt/archives/customprefix*.deb