ファイルをコピーし、シェルスクリプトを使用して確認および圧縮します。

ファイルをコピーし、シェルスクリプトを使用して確認および圧縮します。

私は次のものを作成し、フォルダからコピーされたファイルを確認できるように、LinuxやPythonスクリプトなどのスクリプトを生成したいと思います。

2つのフォルダがあります。

フォルダAには300個の.xlsファイルがあります。このフォルダには、現在フォルダBにある一部のファイルがありません。

FolderBには500個の.xlsファイルがあります。

選択した100個のファイルをBフォルダからAフォルダにコピーしたいです。次に、現在のフォルダA(Bから100個のファイルをコピーしてから400にする必要があります)のすべてのファイルがフォルダBにあるかどうかを確認するスクリプトが必要です。

その後、スクリプトはこれらすべてのファイルを個別に独自のbzip2ファイルに圧縮したいと思います。既定では、プロセスが完了すると、400個のbzip2ファイル(各Excelごとに1つ)が作成されます。

答え1

スクリプトは、そのフォルダ内で圧縮するファイルを自動的に区別する方法をどのように理解できますか?特定の命名規則がありますか?それ以外の場合は、圧縮したいファイルをフォルダAとフォルダBからフォルダCにマージする必要があるかもしれません。次のスクリプトは各ファイルを圧縮します。元の.xlsファイルを保存したくない場合は、削除してください。-k

#/bin/bash
files="/path/to/files"
for f in $files; do
    bzip2 -k $f
done

答え2

欠落している100個のファイルをどのように選択するかは不明です。これにより、100個がランダムに選択されます(最初の100個の欠落ファイルのみを選択したい場合は削除--shuf)。

a=folderA
b=folderB
# copy 100 files from folderB
parallel --shuf -j1 --halt now,success=100 [ ! -f $a/{/} ] '&&' cp {} $a/{/} ::: $b/*
# Verify all files in folderA is in folderB
parallel [ ! -f $b/{/} ] '&&' echo {} is in $a but not in $b ::: $a/*
# bzip2 them all
parallel bzip2 ::: $a/*

bzip2GNU Parallelは、主にCPU固有のスレッドを実行できるように設計されています。

関連情報