私のcmdスクリプトが私のフォルダに移動し、フォルダから古いバージョンのpdf文書を見つけて、Old Versionsという別のフォルダに移動する方法を見つけたいと思います。
私が経験している問題は、ファイル名がバージョンごとに変更されることです。 IE DE-321-DLS-R04.pdfがDE-321-DLS-R05.pdfに変更されました。
どこから始めるべきかわかりません。日付を使用しているがファイル名の異なるスクリプトを見たことがあります。
助けてください。
答え1
たぶん、次のようなものがあります。
find . -name 'DE-321-DLS-R*.pdf' | sort -r | sed '1 d' | xargs mv -t "older versions"
説明する:
find . -name 'DE-321-DLS-R*.pdf'
を使用して現在のディレクトリを一覧表示しますDE-321-DLS-R
。sort -r
ファイルリストの並べ替えキャンセル注文する。sed '1 d'
最初のラインを除くすべての入力ラインを出力します。xargs mv -t "older versions"
mv
前sed
のコマンドの出力を引数として呼び出し、mv
すべての引数をディレクトリに移動するように指示されましたolder versions
。
例:
$ ls -1
DE-321-DLS-R00.pdf
DE-321-DLS-R01.pdf
DE-321-DLS-R02.pdf
DE-321-DLS-R03.pdf
DE-321-DLS-R04.pdf
DE-321-DLS-R05.pdf
$ mkdir "older versions"
$ find . -name 'DE-321-DLS-R*.pdf' | sort -r | sed '1 d' |
xargs mv -t "older versions"
$ ls -1
DE-321-DLS-R05.pdf
older versions
$ ls -1 "older versions"
DE-321-DLS-R00.pdf
DE-321-DLS-R01.pdf
DE-321-DLS-R02.pdf
DE-321-DLS-R03.pdf
DE-321-DLS-R04.pdf
答え2
いくつかのテスト文書を生成します。
$ mkdir temp
$ cd temp
$ touch aaa-R00.pdf aaa-R01.pdf aaa-R02.pdf bbb-R19.pdf bbb-R20.pdf
$ ls | sort -r
bbb-R20.pdf
bbb-R19.pdf
aaa-R02.pdf
aaa-R01.pdf
aaa-R00.pdf
望むより!BBB-R20.pdfそしてaaa-R02.pdf最新バージョンなので、別のバージョンに移動する必要があります。
古い文書を「未使用」とマークするには、このスクリプトを端末にコピーして貼り付けます。
for doc in $(ls | grep 'R[0-9][0-9].pdf$' | sort -r); do
name=${doc%%[0-9][0-9].pdf}
if [[ "$name" != "$last" ]]; then
echo $doc latest
else
echo $doc outdate
fi
last=$name
done
結果:
bbb-R20.pdf latest
bbb-R19.pdf outdate
aaa-R02.pdf latest
aaa-R01.pdf outdate
aaa-R00.pdf outdate
問題の場合は、「echo $doc outdate」を「mv $doc path/to/outdate/」に置き換えることができます。