何百もの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.zip
file1/
file2.zip
file2/
答え2
zsh
// bash
(ksh93
または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 -
その後、バッファはシェルを介してパイプされます。