私のLinuxフォルダには次のファイルがあります。
abc.txt
test.log
kkk.war
Type1_20160814.xml
Type1_20160624.xml
Type1_20160703.xml
Type1_20160503.xml
Type1ファイルをgzipしたいです。いいえ現在、達人である8月に属します(mtimeは使用できません)。
予想される結果は、次のファイルがgzipで圧縮されていることです。
Type1_20160624.xml
Type1_20160703.xml
Type1_20160503.xml
実際に私は試しました:
files=$(find . -maxdepth 1 -mindepth 1 -not -type f -name "Type1_201608*.xml")
gzip -5 ${files[@]}
ただし、これはType1 gzipファイル(以下の表示)でもありません。これを防ぐにはどうすればよいですか?
abc.txt
test.log
kkk.war
ベストアンサー1
find . -maxdepth 1 -mindepth 1 -not -type f -name "Type1_201608*.xml"
つまり、現在のディレクトリ()にあるファイルの場合、名前が一致する非正規. -maxdepth 1 -mindepth 1
ファイル()が一覧表示されます。-not -type f
"Type1_201608*.xml
一致するファイルだけを一覧表示したいので、Type1_*.xml
このパターンをコマンドにどこかに含める必要があります。通常のファイルで作業したいので-type f
。
find . -maxdepth 1 -mindepth 1 -type f -name "Type1_*.xml" ! -name "Type1_201608*.xml"
出力を解析しません。find
。を使用してください-exec
。それがまさにその用途です。
find . -maxdepth 1 -mindepth 1 -type f -name "Type1_*.xml" ! -name "Type1_201608*.xml" -exec gzip -5 {} +
最新のシェルでは、Type1_*.xml
除外したいディレクトリやシンボリックリンクとパターンが一致しない場合は、find
これを行う必要はありません。 kshの拡張globパターンを使用できます。バッシュでも使用可能。
shopt -s extglob
gzip -5 Type1_!(201608*).xml
zsh では ksh 拡張グローバルモードを有効にできますが、以下を使用することもできます。zsh自身。
setopt extended_glob
gzip -5 Type1_*.xml~Type1_201608*
または
gzip -5 Type1_(^201608*).xml
そして、zshで通常のファイルのみが一致することを確認するには、次のようにします。グローバル予選。
setopt extended_glob
gzip -5 Type1_(^201608*).xml(.)