わかりました、とても簡単な問題です。単純なバックアップコードを作成しています。ファイルにスペースが含まれている場合を除き、正常に機能します。これは私がファイルを見つけてtarアーカイブに追加する方法です:
find . -type f | xargs tar -czvf backup.tar.gz
問題は、tarがフォルダーであると見なすため、ファイルの名前にスペースが含まれている場合です。基本的に、findの結果を引用符で囲む方法はありますか?または、これを修正する別の方法?
これを使って:
find . -type f -print0 | tar -czvf backup.tar.gz --null -T -
そうなる:
tar -c
をxargs
と共に使用するのと同じように、backup.tar.gzを繰り返し上書きしません。参照:
あなたが望むものを達成する別の方法があるかもしれません。基本的に、
次に、-Tオプションを指定してtarを実行すると、ファイルの場所(findで作成した場所)のリストを取得できます。
find . -name "*.whatever" > yourListOfFiles
tar -cvf yourfile.tar -T yourListOfFiles
実行してみてください:
find . -type f | xargs -d "\n" tar -czvf backup.tar.gz
何故なの:
tar czvf backup.tar.gz *
確かにfindを使用してからxargsを使用するのは賢明ですが、あなたは難しい方法でやっています。
更新:Porgesが、私の答えまたは他の答えよりも良い答えだと思うfind-optionでコメントしています:find -print0 ... | xargs -0 ....
複数のファイルまたはディレクトリがあり、それらを独立した*.gz
ファイルに圧縮したい場合、これを行うことができます。オプション-type f -atime
find -name "httpd-log*.txt" -type f -mtime +1 -exec tar -vzcf {}.gz {} \;
これは圧縮されます
httpd-log01.txt
httpd-log02.txt
に
httpd-log01.txt.gz
httpd-log02.txt.gz
このようなものを試してみませんか:tar cvf scala.tar `find src -name *.scala`
見られる別の解決策 here :
find var/log/ -iname "anaconda.*" -exec tar -cvzf file.tar.gz {} +
@ Steve Kehlet post にコメントを追加しますが、50 rep(RIP)が必要です。
何度もグーグルでこの投稿を見つけた人には、時間範囲が指定された特定のファイルを見つけるだけでなく、tarringエラーを引き起こす相対パスORの空白も含めない方法を見つけました。 (ありがとうございますSO多くのスティーブ。)
find . -name "*.pdf" -type f -mtime 0 -printf "%f\0" | tar -czvf /dir/Zip.tar.gz --null -T -
.
相対ディレクトリ
-name "*.pdf"
pdf(または任意のファイルタイプ)を探します
-type f
検索するタイプはファイルです
-mtime 0
過去24時間以内に作成されたファイルを探す
-printf "%f\0"
通常-print0
OR -printf "%f"
は機能しませんでした。マニュアルページから:
この引用は、GNU lsと同じ方法で実行されます。これは、-lsおよび-flsに使用されるものと同じ引用メカニズムではありません。 findの出力に使用する形式を決定できる場合は、ファイル名に空白や改行文字が含まれている可能性があるため、通常、改行を使用するよりもターミネータとして「\ 0」を使用する方が適切です。
-czvf
アーカイブの作成、gzipによるアーカイブのフィルタリング、処理されたファイルの詳細なリスト、アーカイブ名編集2019-08-14:追加したいのですが、基本的にはtar自体を使用して、同じコマンドをコメントで使用することもできました:
tar -czvf /archiveDir/test.tar.gz --newer-mtime=0 --ignore-failed-read *.pdf
今日の新しいPDFがなかった場合に必要な--ignore-failed-read
.
最善の解決策は、ファイルリストを作成してからファイルをアーカイブすることです。他のソースを使用して、リストで何か他のことを行うことができるからです。
たとえば、これにより、リストを使用して、アーカイブされるファイルのサイズを計算できます。
#!/bin/sh
backupFileName="backup-big-$(date +"%Y%m%d-%H%M")"
backupRoot="/var/www"
backupOutPath=""
archivePath=$backupOutPath$backupFileName.tar.gz
listOfFilesPath=$backupOutPath$backupFileName.filelist
#
# Make a list of files/directories to archive
#
echo "" > $listOfFilesPath
echo "${backupRoot}/uploads" >> $listOfFilesPath
echo "${backupRoot}/extra/user/data" >> $listOfFilesPath
find "${backupRoot}/drupal_root/sites/" -name "files" -type d >> $listOfFilesPath
#
# Size calculation
#
sizeForProgress=`
cat $listOfFilesPath | while read nextFile;do
if [ ! -z "$nextFile" ]; then
du -sb "$nextFile"
fi
done | awk '{size+=$1} END {print size}'
`
#
# Archive with progress
#
## simple with dump of all files currently archived
#tar -czvf $archivePath -T $listOfFilesPath
## progress bar
sizeForShow=$(($sizeForProgress/1024/1024))
echo -e "\nRunning backup [source files are $sizeForShow MiB]\n"
tar -cPp -T $listOfFilesPath | pv -s $sizeForProgress | gzip > $archivePath