端末から一度に複数のファイルを抽出する

端末から一度に複数のファイルを抽出する

何百ものzipファイルを含むディレクトリがあります。 50個のファイルを選択し、unzip端末で(または)を使用して一度にすべて抽出できるようにしたいと思います。7zファイル名が完全に異なるため、正規表現を使用して一致させることはできません。

簡単な例として、次の3つのファイルがあります。

41a02d81b1c7b6225b11908c38b820cc.zip
d581697699c4321c32b733a9678.zip
ffb7077a319b2d168d5415b0f59a9e2ba3a.zip

手動でコマンドを入力せずにそのうちの2つだけを抽出したいと思います。

GUIを使用して複数のファイルを選択し、コマンドを介して処理するためにリストをbashにエクスポートする方法はありますか?

答え1

次の場合は、シェルとを使用しzshてください。

setopt auto_menu autolist correct no_list_ambiguous
setopt list_types auto_pushd no_list_beep

zstyle ':completion:*' completer _expand _complete _ignored _correct _approximate _prefix
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' group-name ''
eval "$(dircolors)"
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*'
zstyle ':completion:*' max-errors 1 not-numeric
zstyle ':completion:*' menu select=2
zstyle ':completion:*' original true
zstyle ':completion:*' prompt 'correct> '
zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s'
zstyle ':completion:*' verbose true
zstyle ':completion:*' menu select=2
autoload -Uz compinit
compinit -i

(ここでは、~/.zshrcこれらすべてが関連しているわけではなく、compinstall完了した調整を実行して取得できることに注意してください。)次のように入力できます。

$はfを表します(*.zipTab

zipこの時点で、現在のディレクトリのファイルが一覧表示され、矢印キーとを使用してそのファイルを選択するように求められますEnter

Enter項目を選択するために+を押すのではなく、Alt+を押すとA現在の項目が挿入されますが、引き続きさらに多くのファイルを選択することもできます。

最後にファイルを押してEnterコマンドを完了します。例:

for f (file1.zip file2.zip) unzip -d $f:r $f

各ファイルの名前は同じですが、拡張子(in、inなど)を持た.zipないディレクトリに抽出されます。file1.zipfile1/file2.zipfile2/

答え2

zsh// bashksh93またはGNUを使用)でprintf次のことができます。

$ printf 'unzip %q\n' ./*.zip > commands
$ vi commands

(またはお気に入りのテキストエディタ)からvi解凍したくないファイル行を削除します。変更を保存します。次に、次を実行します。

zsh -x ./commands

zsh必要なシェル、可能な場合はコマンドを実行するシェルと交換してくださいprintf。)


unzip 'file.zip'ファイルにコマンドを保存する代わりに、ファイルのみを保存することもできます。

printf '%s\n' ./*.zip > files

そして編集してくださいfiles

すべてのファイル名に改行文字が含まれておらず、GNUを使用しているとしますxargs

xargs -d '\n' -tr0a files -n1 unzip

解凍した。


zshを使用する同様のアプローチは、同様の操作を実行することですが、ファイルを編集するのではなく、組み込み関数を使用してvared変数を編集します。

list=(*.zip)

$list現在のディレクトリのzipファイルを使用して配列をシードします。

vared list

これを行うには、解凍したくないものをed削除してください。varそれから:

for f ($list) unzip -d $f:r $f

すべてのファイルを$list

答え3

あなたはそれを使用することができますアイセレクトこのために。リスト(ファイル名など)を指定すると、端末にダイアログボックスが表示され、1つ以上の項目を選択できます。

選択したアイテムのリストを返し、そのアイテムに対して必要な操作を実行できます。

私はあなたと同様のことをするために何年もスクリプトで何度も使用してきました。

または、真夜中司令官ディレクトリをナビゲートできる(そしてzipファイルを「インポート」、つまりディレクトリのようにナビゲートできる)フル機能のテキストモードファイルブラウザで、ファイルビューアとシンプルなエディタが組み込まれており、ファイルを選択することができます。組み込み関数と一緒に使用するか、外部プログラムにパラメータとして渡します。

Midnight Commanderはよく知られており、すべてではありませんが、ほとんどのディストリビューションで利用可能です。 iselect少しあいまいです。 Debian ではそれぞれmcと でパッケージされていますiselect

答え4

このようなことは、X選択/貼り付け規則の目的です。

find that/dir; while read; do whatever with $REPLY; done

次に、3回クリックしてスクロールバックバッファリストから1行を選択し、マウスの中央ボタンをクリックして端末に貼り付けます。リストからあなたの席を失わないでください

それともそれほど価値のあるエディタを実行できます。 emacsにはdiredが組み込まれており、vimにはnetrwが組み込まれており、必要なファイルを表示してから、表示されたファイルで目的の操作を実行できます。

あるいは、すべてのコマンドをファイルとして生成し、不要なコマンドを編集することもできます。

find that/dir -iname \*.zip -printf '7z x %p\n' | vim -R -

その後、バッファはシェルを介してパイプされます。

関連情報