私はWSL(Ubuntu)を使用しており、ファイルを複数のサブフォルダに再帰的に圧縮したいと思います。
つまり
Main Folder .
SubFolder 1's files get zipped into a .zip
SubFolder 2's files get zipped into a .zip
SubFolder 3's files get zipped into a .zip
SubFolder 4's files get zipped into a .zip
SubFolder 5's files get zipped into a .zip
etc.
ホームフォルダに移動して、次を実行します。
find . -type d -maxdepth 1 -execdir zip -r '{}.zip' '{}' \;
これを行った後、次のスパムメールが届きました。
検索: 'zip':そのファイルまたはディレクトリはありません。
exec
私も代わりに使用して同じ行を試しましたが、execdir
同じ結果を得ました。誰でも問題を指摘できますか?
答え1
このエラーは、コマンドがインストールされていないことを意味しますzip
。テストしてみてください。command -v zip
;空の出力はインストールされていないことを意味します。インストールしてくださいsudo apt install zip
。
zip
ファイルを各ディレクトリに分割する入らないようにするcommnadのディレクトリ-j
にオプションを追加する必要があります。zip
find . -mindepth 1 -maxdepth 1 -type d -execdir zip -jr '{}.zip' '{}' \;
-maxdepth
以前にオプションを指定し、現在のディレクトリ圧縮を無視するか、2つを次に置き換えるオプションも-type d
追加する必要があります。-mindepth 1
[ ! -name . -prune
; POSIX照会を特定の深さに制限しますか? ]したがって、コマンドは次のようになります。
find . ! -name . -prune -type d -execdir zip -jr '{}.zip' '{}' \;
または for ループを使用できます。
for thing in ./*; do
[[ -d "${thing}" ]] && zip -jr "${thing}.zip" "${thing}";
done
使用されたオプションのために-j
異なるサブディレクトリから単一のzipファイルとして収集された類似の名前を持つファイルがある場合、コマンドは同じファイル名のために圧縮を停止します。