Skip to content

Instantly share code, notes, and snippets.

Last active December 27, 2022 06:05
What would you like to do?
すべてのファイルを ../files にコピーするシェルスクリプトを生成する。ただし、フォルダがない場合は新たに作成し、拡張子がhtm,html,js,css,txtの場合はgzip圧縮し、拡張子.gzを追加する。
# すべてのファイルを ../files にコピーするシェルスクリプトを生成する。
# ただし、フォルダがない場合は新たに作成し、
# 拡張子がhtm,html,js,css,txtの場合はgzip圧縮し、拡張子.gzを追加する。
use strict;
use warnings;
use File::Find;
use feature 'say';
use File::Path;
use File::Basename;
my @files;
find( sub {
my $src=$File::Find::name;
return if($src eq '.');
return if($src=~m!^/Makefile$!);
my $dst=$src;
push @files,{ src => $src, dst => $dst};
my %dirs;
foreach (@files) {
if($_->{src}=~m!\.(?:html?)|(?:js)|(?:css)|(?:txt)$!) {
$_->{cmd}=qq{gzip -c -9 "$_->{src}" > "$_->{dst}"};
} else {
$_->{cmd}=qq{cp "$_->{src}" "$_->{dst}"};
foreach(keys %dirs) {
say qq{mkdir -p "$_"};
foreach(@files) {
say $_->{cmd};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment