web-dev-qa-db-ja.com

コマンドラインを使用して分割RARアーカイブファイルのすべての部分を削除するにはどうすればよいですか?

私は通常、ある種のDebianベースのLinuxディストリビューションを使用しています。 Debian7.8またはLinuxMint17のいずれかです。次のような分割RARファイルがあります。

filename.rar
filename.r01
filename.r02
filename.r03
etc ...

dtrxまたはunrarを使用してアーカイブを抽出したので、できれば1行を使用して、分割アーカイブのすべてのパーツファイルを削除したいと思います。

現時点ではrm filename.r*を実行しますが、これは一般的にはうまく機能しますが、ファイルの名前がrabbid.ranger.robot.r01の場合、抽出されたディレクトリrabbid.ranger.robotも削除できます。

だから私はもう少し頑丈なものを探しています。

短いスクリプトも受け入れます。

6
fswings

持っている.r0*ファイルの数に応じて、*?に置き換えることができます。これにより、.r0と他の1文字のファイルが削除されます。したがって、rabbid.ranger.robot.r01は削除されますが、rabbid.ranger.robot.r010は削除されません。通常、次のように使用します。

rm filename.r??
6
Devan

パーツ番号が最大12の分割RAR(つまり、最後のファイルとしてfilename.r12)があり、 any 他のファイルを削除しないように特に注意したいとします。 bash がシェルであると仮定すると バージョン4以降を使用しているbash --versionで確認)-を使用すると、ファイルの明示的なリストを簡単に作成できます。 ブレース拡張

rm filename.rar filename.r{01..12}

これにより、 only これらのファイルが削除されます。filename.rtf(またはfilename.r13)という名前のファイルも保存されます。フォルダ内にある(または持っている可能性のある)他のファイルに応じて、これは Devanによって提案された通常は非常に優れた.r??方法 よりも好ましい場合とそうでない場合があります。

数値範囲を含む中括弧の拡張は、いくつかのシェルの非常に古い機能です。ただし、バージョン4より前では、bashはゼロパディングをサポートしていませんでした(つまり、filename.r05ではなくfilename.r5のような名前が必要です)。

最初に、中括弧式が展開されるファイル名を確認できます。

$ echo filename.rar filename.r{01..12}
filename.rar filename.r01 filename.r02 filename.r03 filename.r04 filename.r05 filename.r06 filename.r07 filename.r08 filename.r09 filename.r10 filename.r11 filename.r12

(この方法でも、*または?を使用して式を確認できます。展開する対象は、コマンドを実行したときに存在するフォルダーによって異なることに注意してください。)

10
user105707

find コマンドを使用できます。作業ディレクトリから:

find . -type f -name "filename.*" -exec rm  {} \;

これは一致するファイルのみを検索し、ディレクトリは除外されます。最初にコマンドをlsではなくrmでテストして、希望する結果が返されることを確認することをお勧めします。

find . -type f -name "filename.*" -exec ls {} \;
4
nod