いくつかの正規表現に基づいてディレクトリ内のすべてのフォルダを圧縮しようとしているので、grepを使用して出力をフィルタリングしています。 tarとフォルダ名を使用する必要があります。
たとえば、各トップレベルディレクトリを.tar.gzで独自のアーカイブにしたいとします。ディレクトリ名は "web_"で始まる必要があり、 ".tar.gz"で終わることはできません。
次のようにgrep出力をvaribelにキャプチャするにはどうすればよいですか?
find . -maxdepth 1 -mindepth 1 -type d -print | grep -v \.tar\.gz$ | grep ^\./web_ | exec tar -czf $name.tar.gz $name
またはls -hを使用してください。
ls -h | grep -v \.tar\.gz$ | grep ^web_ | exec tar -czf $name.tar.gz $name
「検索...」を選択してください。
root@4a94aef49e3a:/home# find . -maxdepth 1 -mindepth 1 -type d -print | grep -v \.tar\.gz$ | grep ^web_
./web_demozip1
./web_demozip2
「ls -h」を選択してください。
root@4a94aef49e3a:/home# ls -h | grep -v \.tar\.gz$ | grep ^web_
web_demozip1
web_demozip2
例:
# fixed name works but its overwrite itself so I need to catch a var from grep
ls -h | grep -v \.tar\.gz | grep ^_web | exec tar -czf web_demozip1.tar.gz web_demozip1
root@4a94aef49e3a:/home# pwd
/home
root@4a94aef49e3a:/home# tree .
.
├── web_demozip1
│ └── somefile.txt
├── web_demozip1.tar.gz
└── web_demozip2
└── somefile.txt
ベストアンサー1
find
結果をフィルタリングするために使用する必要はありませんgrep
。代わりにフィルタ機能を使用してくださいfind
。
find . -maxdepth 1 -mindepth 1 -type d \
-name 'web_*' \
-exec tar czf {}.tar.gz {} \;
find
フィルタリングはを使用して行うこともできますが、regex
例では必要ありません。バラよりここそれを行う方法。