サブフォルダーを含む複数レベルの2 GBイメージを含むフォルダーがあります。
N
tarファイルに各(サブ)フォルダのファイルのみを保存したいと思います。find
その時使ってみましたが、うまくtail
いきtar
ませんでした。私が試したことは次のとおりです(仮説N = 10
)。
find . | tail -n 10 | tar -czvf backup.tar.gz
...このエラーを出力します。
Cannot stat: File name too long
どうなりますか?考えてみてください。動作していても、10個のファイルではなく、すべてのフォルダの最初の10個のファイルだけを圧縮すると思います。各フォルダ。
N
各フォルダのファイルを取得するには? (書類注文は不要)
ベストアンサー1
pax
この-0
オプションをサポートしている場合は、以下を使用してくださいzsh
。
print -rN dir/**/*(D/e:'reply=($REPLY/*(ND^/[1,10]))':) |
pax -w0 | xz > file.tar.xz
これには、リスト内の各ディレクトリの最初の10個のディレクトリ以外のファイルがファイル名でソートされて含まれます。 glob修飾子を追加することで、別のソート順を選択できますom
。Om
oL
non
標準コマンドがないかpax
サポートされていないが-0
GNUコマンドがある場合は、tar
次のことができます。
print -rN -- dir/**/*(D/e:'reply=($REPLY/*(ND^/[1,10]))':) |
tar --null -T - -cjf file.tar.xz
その権限がないがzsh
アクセス権bash
(GNUプロジェクトのシェル)がある場合は、次のことができます。
find dir -type d -exec bash -O nullglob -O dotglob -c '
for dir do
set -- "$dir/*"; n=0
for file do
if [ ! -d "$file" ] || [ -L "$file" ]; then
printf "%s\0" "$file"
(( n++ < 10 )) || break
fi
done
done' bash {} + | pax -0w | xz > file.tar.xz
ただし、これにより効率が大幅に低下します。