背景
ディレクトリにはN個のサブディレクトリを含めることができます。各サブディレクトリには、抽出する複数の.rarファイルが含まれています。
~/mydir/Data1~/mydir/Data2...~/mydir/DataN
「i」と「r」、「a」と「1」の間のスペースに注意してください。
ターゲット
コマンドラインから単一のコマンドを実行して.rarファイルを解凍し、そのファイルを元の.rarディレクトリに残します(新しいディレクトリは作成しません)。
私の最初のアイデアは、.rarファイルのリストを再帰的に作成して直接出力することでした。
ホームページ/ユーザー/ mydi \ r / Data \ grep.rar検索1 |
次のように入力xargs
して解凍します。
unrar e -r /home/user/mydi\ r/Data\ 1/myfile.rar
質問
xargs
ディレクトリとファイル名の空白文字と文字なしを正しく処理できますか\
?
ディレクトリと.rarファイル名の空白文字が原因でエラーが発生したと思われます。
find /home/user/Desktop/ -name "*Har*.rar" | xargs -d '\n' unrar e -r
unrar
空白文字の前に '\'が必要です。
/home/user/mydi\ r/Data\ 1/myfile.rar
返されたエラー: No files to extract
診断に関する質問や提案がありましたら、よろしくお願いします。
答え1
これがGNUにオプションがfind
ある理由です。-print0
GNUにはオプションxargs
があります-0
。これらのオプションを使用すると、find
ファイル名はASCII文字で区切られ、検索文字は入力引数を区別しますNUL
。これにより、スペースを含むファイル名を正しく処理できます。xargs
NUL
たとえば、
find /home/user/Desktop -name '*.rar' -print0 | xargs -0 -n1 unrar e -r
コマンドラインでアーカイブが予想されるため、この-n1
フラグが必要です。xargs
unrar e