-1

私は一連のフォルダーをループしようとしていますが、そのうちの 1 つ (または複数) のファイルが特定の日付よりも新しい場合、そのフォルダーとその中のファイルを次のように表示する必要があります。

(日付は一週間前です)

Folder 1
  file 1
*Folder 2 (no files matching the date, should not be visible/echo'ed)*
Folder 3
  file 1
  file 2
Folder 4
  file 1

これを達成する方法は?私のコード例は次のとおりです。

#!/opt/bin/bash
#
# CurrentTvList.sh
# File for generating a current list of stored tvshows on my nas
# Patrick Osterlund
# 

#set -x
#trap read debug

# Settings
#
NEWTMPFOLDER="/volume1/tmp/tvtemps/"
NEWTMPFILE="TmpTvlisting.txt"
SIMPLER=$NEWTMPFOLDER$NEWTMPFILE
SMALL=2
MEDIUM=14
LARGE=30

# Clear screen; remove later
clear

#check if dir exists
mkdir -p ${NEWTMPFOLDER}

#check if file exists
if [ -f $SIMPLER ];
then
   echo "File: $NEWTMPFILE exists in $NEWTMPFOLDER" $'\n'

   FILEDATE=$(date -r $SIMPLER)
    #Check if file is newer than the existing one
    if [[ $SIMPLER -nt $FILEDATE ]]; then
        echo "$SIMPLER is newer than $FILEDATE"
    else
        echo "file created $FILEDATE is newer than file created; $SIMPLER"
    fi
   echo "and it was created: $FILEDATE" #$'\n\n'
   echo "File was created: " > $SIMPLER 
   echo $FILEDATE >> $SIMPLER $'\n'
else
   echo "File $NEWTMPFILE does not exists in $NEWTMPFOLDER, creating it"
   touch $SIMPLER;
fi
# Mostly for checking if all went well:
echo "looking here:" $NEWTMPFOLDER;
echo "file: $NEWTMPFILE"

# Small list
echo "New shows last ${SMALL} days: " $'\n' >> $SIMPLER
find /volume2/Disk2/!Tv-Serier/ -type f -mtime -$SMALL -size +2048 -exec basename {} \; | sed 's/\.[^.]*$//'\
>> $SIMPLER

# Medium list
echo $'\n' "New shows last ${MEDIUM} days: " $'\n' >> $SIMPLER
find /volume2/Disk2/!Tv-Serier/ -type f -mtime -$MEDIUM -size +2048\
 -exec basename {} \; | sed 's/\.[^.]*$//' >> $SIMPLER | sort -df

# Not in use right now
# Large list
#echo $'\n' "New shows last ${LARGE} days: " $'\n' >> $SIMPLER
#find /volume2/Disk2/!Tv-Serier/ -type f -mtime -$LARGE -size +2048\
# -exec basename {} \; | sed 's/\.[^.]*$//' >> $SIMPLER | sort -df
4

1 に答える 1

0

次のように、先週変更された現在のディレクトリ内のファイルを一覧表示する-newerctオプションを使用できます。find

find . -maxdepth 1 -type f -newerct '1 week ago'

ここで-maxdepth 1は、検索を現在のディレクトリに限定します。-type fプレーン ファイル (サブディレクトリなどではない) のみを選択し-newerctc手段「inode 変更時刻」およびt手段「次の引数を、次の引数が理解される形式の直接の日付指定として解釈するcvs

したがって、スクリプトは次のようになります。

something | while read DIRECTORY; do {
    cd -- "$DIRECTORY"
    if find . -maxdepth 1 -type f -newerct '1 week ago' | grep -q .
    then
        printf "%s\n" "$DIRECTORY"
        printf "  %s\n" *
    fi
} done

something検索するディレクトリを一覧表示するコマンドはどこにありますか。

上記のコードでは、質問に書いたことを意味していると仮定しています。つまり、ディレクトリ内のファイルが 1 週間前よりも新しい場合、ディレクトリ内のすべてのファイルを一覧表示する必要があります

于 2013-10-28T12:43:14.597 に答える