私はLinuxに初めて触れました。 Linuxには、端末を介してファイル形式を変換する方法がいくつかあることがわかります。しかし、次のことを達成する方法はありますか?
3つのフォルダがあり、このフォルダ内に15のフォルダがあります。各フォルダには、.xls形式の12個のファイルと他の.Rファイルとpdfファイルがあります。すべての.xlsを.xlsx形式に変換してこの3つのフォルダの正確なコピーを作成する方法はありますか?
次の内容が現実的でない場合は、フォルダ内のすべての.xlsファイルを.xlsxファイル形式に変換するにはどうすればよいですか?これで上記の内容をコピーできます。
注:私はLibreOfficeを持っておらず、WPSを使用しています。次にLibreOfficeが必要な場合は、必要に応じてインストールできます。
答え1
これは必要でしょうlibreoffice
このスタックオーバーフローの質問からxlsファイルをxlsxファイルに変換するUnixコマンドは何ですか?:
libreoffice --convert-to xlsx my.xls --headless
この--convert-to
オプションは--headless
(上記のSO回答が2014年に作成されたときにLibreofficeバージョン4.2.3では使用できませんでしたが、少なくともLibreoffice 6は2018年にリリースされる予定で、おそらくそれより長くなるでしょう)。これをコマンドラインに追加しても何の害もありませんが、必須ではありません。
find
その後、これをコマンドに統合できます。
find . -type f -name "*.xls" -exec libreoffice --convert-to xlsx {} \;
このコマンドは、現在のディレクトリで名前で終わるファイルを見つけ、ファイル.xls
名に置き換えられたコマンドを実行します。{}
フリーランス会社員状態:
--convert-to output_file_extension[:output_filter_name] [--outdir output_dir] file...
ファイルを一括変換します。指定しない場合、
--outdir
現在の作業ディレクトリは変換されたファイルの出力ディレクトリとして使用されます。これは意味する--headless
例:
--convert-to pdf *.doc
すべての.docファイルをPDFに変換します。
--convert-to pdf:writer_pdf_Export --outdir /home/user *.doc
Writer PDFの書き出しダイアログボックスの設定を使用して、すべての.docファイルをPDFに変換して/home/userに保存します。
@casさんのコメントです。
libreofficeは複数のファイル名引数を使用できるため(マンページの例ではこれを示しています)、findで実行する方が高速です。 -type f -name '*.xls' -exec libreoffice --convert-to xlsx {} + - 各ファイルに対して 1 回ではなく libreoffice を 1 回実行するだけです。
find . -type f -name '*.xls' -exec libreoffice --convert-to xlsx {} +
答え2
MacOSで動作するように@Nicolasの答えを少し修正しました。 "libreoffice"コマンドがシェルに対して定義されていない可能性があるため、libreofficeバイナリを指す必要があります。私の場合は、次のようになりました。
find . -type f -name "*.xls" -exec /Applications/LibreOffice.app/Contents/MacOS/soffice --convert-to xlsx {} \;