私はこのコードを使用しようとしました。
find documents -maxdepth 1 -type f -print0 | xargs -0 tar cvf documents.tar.gz
カタログ文書のバックアップを作成します。
このディレクトリの構造は次のとおりです。
単一のディレクトリであるfiles/に保存したいと思います。
しかし、私はそうしませんでした。どうすればいいですか?ありがとう
答え1
tarの代わりに別のディレクトリにハードリンクできます。
# find all files in directory named directory
find directory -type f | \
while read f;
do
f2=`echo "$f"|sed -e 's/\//:/g'` # replace / with :
ln "$f" "directory2/$f2" # create hardlinks in directory2/
done
これにより、次のリンクが生成されます。
directory/file1 => directory2/directory:file1
directory/file2 => directory2/directory:file2
directory/folder1/file3 => directory2/directory:folder1:file3
directory/folder1/file4 => directory2/directory:folder1:file4
directory/folder2/file5 => directory2/directory:folder2:file5
directory/folder3/folder4/file6 => directory2/directory:folder3:folder4:file6
directory/folder3/folder4/file7 => directory2/directory:folder3:folder4:file7
答え2
私が望む方法は、バックアップソースとして新しいディレクトリを作成し、ハードリンクで埋めることです。バックアップしたいディレクトリツリー全体が同じボリュームにあることを願っています。
> pwd
/path/to/documents
> cd /path/to/
> mkdir tar-documents
> mkdir tar-documents/documents
> ln /path/to/documents/file1
> ln /path/to/documents/file2
> ln /path/to/documents/folder1/file3 folder1:file3
[...]
ファイルの数が多い場合は、スクリプトを介して実行する必要があります。
その後、tar
このディレクトリで実行します。
> cd /path/to/tar-documents
> tar cvzf /backup/path/documents.tar.gz documents
最後にディレクトリを削除するとtar
便利です。
答え3
これを試してみてください。
*tar
現在のフォルダからすべてのファイルを見つけ、フォルダまたは目的のMainDirectory
場所にコピーします。
find . -iname "*tar*" -exec cp {} ~/MainDirectory/ \;
答え4
まず、ディレクトリをアーカイブする場合、アーカイブに同じファイル構造を持つことが適切なスナップショットを作成するのに最適な方法です。あなたが要求するのは、親ディレクトリ、コロン、ファイル名を含むようにファイル名を変更することです。しかし、私にとって奇妙なことは、これが文脈から外れたことです。私は--transform
このオプションを使ってかなり近づいています。
--transform=EXPRESSION, --xform=EXPRESSION
use sed replace EXPRESSION to transform file
例を以下に説明する。このスタック交換の回答 (これではありませんが、参考にしてください。正しいsed
文法)。コマンドを使用すると、--transform
次のようになります。
tar czvf documents.tar.gz --transform 's/\//:/g' documents
残念ながら、これはサブディレクトリをアーカイブに保持するため、目的の効果は得られませんが、サブディレクトリは空であり、ファイルは最初の親ディレクトリではなくアーカイブのルートにあります。
オプションを使用するソリューションがあると思います-C, --directory
が、それは動的ではなく、新しいファイル名でファイルのディレクトリ名を保持するのには適していません。
私が見つけた解決策は、あなたが持っているソリューションと変換コマンドの使用を混在させることです。
find documents -type f -print0 | xargs -0 tar czvf test.tar.gz --no-recursion --transform 's/\//:/g' --transform 's:\::/:1' documents/
また、あなたの質問にファイル名を拡張子として指定しましたが、.gz
その-z, --gzip
オプションはありません。
これが役に立つことを願っています、
アレックス