web-dev-qa-db-ja.com

bashスクリプトで複数のtarファイルを作成し、ファイル名として日付を使用するにはどうすればよいですか?

たくさんのファイルがあり、100ファイルごとにアーカイブを作成したいと思います。つまり、最初の100ファイルは1つのtarファイルにあり、101番目から200番目のファイルは別のtarファイルにあります。そして、tar名として日付(ナノ秒)を使用したいと思います。

私はこのようなものを持っています:

( cd "${SOURCE_DIR}" && find . -type f -name "${FILE_GLOB}" ) | 
  xargs -n 100 | xargs -I % sh -c '{tar -C "${SOURCE_DIR}" --files-from - % -cf "${DESTINATION_DIR}/$(date '+%Y%m%d%H%M%S%N')-$(uname -n).tar~"}'

問題は、日付形式の文字列の「%」がxargsからの引数を受け入れることですが、これは望ましくありません。

どうすればこれを防ぐことができますか?

4
Ron

明らかに、%の代わりに別の記号を使用してください。

たとえば、-I @を使用します。したがって、次のようになります。

( cd "${SOURCE_DIR}" && find . -type f -name "${FILE_GLOB}" ) | 
  xargs -n 100 | xargs -I @ sh -c '{tar -C "${SOURCE_DIR}" --files-from - @ -cf "${DESTINATION_DIR}/$(date '+%Y%m%d%H%M%S%N')-$(uname -n).tar~"}' 
2
rush