.rar
そのため、複数のフォルダにある複数のファイルを解凍しようとしました。一部のパッケージはわずかに異なり、屋根ふきによって問題が発生する可能性があります。
- folder 1
- file.part01.rar
- file.part02.rar
- ...
- folder 2
- file.r01
- file.r02
- file.rar
- folder 3
- file1.rar
- file2.rar
- ...
操作が完了したり、その後for f in *.rar; do unrar e $f;done
はループに入り、すでに完了したファイルの圧縮を解放し続けます。part01.rar
&はpart02.rar
すべてrarファイルであり、コマンドを満たすためです。
この循環を止めるために私ができることはありますか?
50個以上のフォルダがあるため、すべてのフォルダを個別に参照したくありません。
答え1
partN.rar
N
1より大きいもので終わるファイルを除外したいようです。使用zsh
:
set -o extendedglob
for file (./**/(^*part<2->).rar(N.)) echo unrar e $file
echo
効果が満足のいく場合は削除してください。
の場合、bash
状況はもう少し複雑です。
(export LC_ALL=C; shopt -s extglob globstar nullglob
for file in ./**/!(*part*(0)@([2-9]|[1-9]+([0-9]))).rar; do
[ -f "$file" ] || continue
[ -L "$file" ] && continue
echo unrar e "$file"
done)
またはGNUを使用してくださいfind
:
LC_ALL=C find . -name '*.rar' -type f -regextype egrep \
! -regex '.*part0*([2-9]|[1-9][0-9]+)\.rar' \
-exec echo unrar e {} \;
(隠しrarファイルまたは隠しディレクトリにあるrarファイルも考慮されます。)
unrar l
あるいは、ファイル出力を解析して、単一ボリュームアーカイブまたはマルチボリュームアーカイブの最初のボリュームを確認することもできます。
ここではunrar 5.61でテストしました。rarlab.comバージョン5 RARアーカイブ(という名前のアーカイブがないと仮定$'whatever\nDetails: whatever.rar'
)で、ここでzsh
:
is_first_volume() {
unrar l "${1-$REPLY}" 2>&1 | awk '
/^Details: / {
is_rar = /RAR/
if (/volume/) volume = $NF
exit
}
END {
if (!is_rar || volume > 1) exit 1
}'
}
for file (./**/*.rar(N.+is_first_volume)) echo unrar e $file
答え2
たぶん試してみてください:
find . -type f -name '*.rar' -print0 | xargs -0I{} unrar e {}
答え3
あなたの質問を正しく理解したら、ファイルのスナップショットを撮り、.rar
そのファイルを解凍したいだけです。.rar
rarファイルの元のスナップショットから他のファイルを解凍しないでください。。
# put all files currently in the directory in a variable
csc_rarfiles=(*.rar)
# now iterate over the files contained in the array and unrar only those
for f in "${csc_rarfiles[*]}"; do unrar e "$f"; done
答え4
unrar e -r -o- *.rar
奇跡的に動作します。現在のディレクトリに抽出するだけで、ターゲットディレクトリを追加してそこにあるすべてのファイルを抽出することもできます。