毎日表示されるファイルを含むディレクトリがあります。さて、これらのファイルを日付別にグループ化したいと思います。とにかく、同じ日付に到着したファイルをグループ化または一覧表示できますか?
次のファイルがディレクトリにあるとします。
-rw-r--r--. 1 anirban anirban 1598 Oct 14 07:19 hello.txt
-rw-r--r--. 1 anirban anirban 1248 Oct 14 07:21 world.txt
-rw-rw-r--. 1 anirban anirban 659758 Oct 14 11:55 a
-rw-rw-r--. 1 anirban anirban 9121 Oct 18 07:37 b.csv
-rw-r--r--. 1 anirban anirban 196 Oct 20 08:46 go.xls
-rw-r--r--. 1 anirban anirban 1698 Oct 20 08:52 purge.sh
-rw-r--r--. 1 anirban anirban 47838 Oct 21 08:05 code.java
-rw-rw-r--. 1 anirban anirban 9446406 Oct 24 05:51 cron
-rw-rw-r--. 1 anirban anirban 532570 Oct 24 05:57 my.txt
drwxrwsr-x. 2 anirban anirban 67 Oct 25 05:05 look_around.py
-rw-rw-r--. 1 anirban anirban 44525 Oct 26 17:23 failed.log
したがって、すべてのファイルが一意であるため、サフィックス/プレフィックスを使用してファイルをグループ化することはできません。現在探しているコマンドを実行すると、日付でグループ化され、次の行セットが表示されます。
[ [hello.txt world.txt a] [b.csv] [go.xls purge.sh] [code.java] ... ] and so on.
このリストを使用して循環して保管します。
tar -zvcf Oct_14.tar.gz hello.txt world.txt a
答え1
の場合、zsh
キーが日付であり、値がその日付で最後に変更されたファイルのNULで区切られたリストである連想配列を使用します。
zmodload -F zsh/stat b:zstat
typeset -A files
for file (./*) {
zstat -LA date -F %b_%d +mtime $file &&
files[$date]+=$file$'\0'
}
for date (${(k)files})
echo tar zcvf $date.tar.gz ${(0)files[$date]}
満足のいくものを削除してくださいecho
。
月名の略語(%b
strftime形式)は、現在のロケールの言語(Oct
英語システム、Okt
ドイツ語システムなど)で表示されます。ユーザーのロケールに関係なく、常に英語名にするには、ロケールC
をLC_ALL=C zstat...
。
GNUツールを使用すると、次のことができます。
find . ! -name . -prune ! -name '.*' -printf '%Tb_%Td:%p\0' |
awk -v RS='\0' -F : -v q=\' '
function quote(s) {
gsub(q, q "\\" q q, s)
return q s q
}
{
date=$1
sub(/[^:]*:/, "", $0)
files[date] = files[date] " " quote($0)
}
END {
for (date in files)
print "tar zcvf " quote(date ".tar.gz") files[date]
}'
うれしいときに吹いてくださいsh
。
答え2
while read date a b filename; do
zip -g ../$date.zip "$filename"
done <<< $(stat -c "%y %n" *)
答え3
私は質問を間違って理解したかもしれませんが、
ls -ls |grep '10月26日' > oct26.list
10月26日のファイルリストを提供します。たとえば、数時間の間に追加の grep "| grep 09:" などを使用して同じ操作を実行できます。次に、oct26.list リストを使用して、必要なすべての操作を実行します。