0

名前の特定のキーワードに一致するファイルを解凍する必要があります。典型的なファイルは次のようになります。

JGS-Memphis~PSU~FVT~00000~JGM96911~1~P~1100~EPS10R0-15~CL10D1120A3271~0121017~141645.XML

私がする時

unzip -o SOMEFILE.zip '*~PSU~*' -d psutmp/

上記のファイルSOMEFILE.zipを問題なく解凍します。しかし、私がするとき

for i in `find . -name '*zip'`; do  unzip -o "$i" \'*PSU*\' -d psutmp/ ; done

エラーで失敗しfilename not matched: '*PSU*'ます。PSUの周りの目盛りを外してみました。同じ問題。

-C大文字と小文字を区別せずにファイル名を一致させるオプションも試しました

for i in `find . -name '*XML*zip'`; do  unzip -o "$i" -C *PSU* -d psutmp/ ; done

で失敗します

error:  cannot create psutmp/JGS-Memphis~PSU~FVT~00000~JGM96911~1~P~1100~EPS10R0-15~CL10D1120A3271~0121017~141645.XML

これはバンクです。私は、150GB のストレージを備えた開発マシンのルート ユーザーです。容量は 12% です。私は何が欠けていますか?

4

1 に答える 1

3

のバックスラッシュを削除します\'*P5U*\'。一重引用符をエスケープする必要はありません。

for i in `find . -name '*zip'`; do  unzip -o "$i" '*PSU*' -d psutmp/ ; done

for ループでバッククォートを使用するのは、ややコードの匂いがします。代わりにこれらのいずれかを試してみます:

# Unzip can interpret wildcards itself instead of the shell
# if you put them in quotes.
unzip -o '*.zip' '*PSU*' -d psutmp/

# If all of the zip files are in one directory, no need for find.
for i in *.zip; do unzip -o "$i" '*PSU*' -d psutmp/; done

# "find -exec" is a nice alternative to "for i in `find`".
find . -name '*.zip' -exec unzip -o {} '*PSU*' -d psutmp/ \;

エラーに関する限り、psutmp/存在しますか? 書き込みできるようにアクセス許可が設定されていますか?

于 2012-10-17T23:46:44.883 に答える