背景

背景

背景

ディレクトリには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ある理由です。-print0GNUにはオプションxargsがあります-0。これらのオプションを使用すると、findファイル名はASCII文字で区切られ、検索文字は入力引数を区別しますNUL。これにより、スペースを含むファイル名を正しく処理できます。xargsNUL

たとえば、

find /home/user/Desktop -name '*.rar' -print0 | xargs -0 -n1 unrar e -r

コマンドラインでアーカイブが予想されるため、この-n1フラグが必要です。xargsunrar e

関連情報