0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Perlを使って指定したファイルを自動的にコピーしてみた

Posted at

#はじめに
大学の研究で膨大な量のファイルを扱う機会があったので、Perlでファイルのコピーを自動化してみました。
今回は指定した名前のファイルを選択し、ディレクトリにコピーする方法です。
以下のようなディレクトリ構成となっています。
xdir
|-xfile1
|-xfile2
|-xfile3
xxdir
|-xxfile1
|-xxfile2

#実行環境

  • Ubuntu 18.4
  • Perl v5.26.1

#ソースコード
ファイル名はFiles_cpy.plとします。
実行はスクリプトのあるディレクトリから
$perl Files_cpy.pl [コピーするファイル名]
で行います。

Files_cpy.pl
#!/usr/bin/perl 

use strict; 
use warnings; 

use Cwd; 

use constant{ 
     TARGET_DIRECTORY => "コピー先のディレクトリ名", 
 }; 

my $name = $ARGV[0]; #コピーするファイル名
my $CurrentDir = Cwd::getcwd(); #カレントディレクトリを取得
DeployFiles($CurrentDir); #メイン処理

##DeployFiles 
sub DeployFiles{ 
    my $CurrentDir = shift; #ひとつの引数を受け取る 
    my @list = (); 

    #カレントディレクトリの一覧を取得 
    opendir(DIR, $CurrentDir) or die("Can't get directory.:$CurrentDir($!)"); 
    @list = readdir(DIR); 
    closedir(DIR); 
 
    foreach my $dir (sort @list){ #辞書順にソート 
    next if($dir =~ /^\.{1,2}$/); #カレントディレクトリ"."とひとつ上の階層のディレクトリ".."は処理しない 
    next if($dir eq TARGET_DIRECTORY); #コピー先のディレクトリ内のファイルは処理しない
    #ディレクトリのみにマッチ 
   if(-d "$CurrentDir/$dir"){ #ディレクトリの存在を確認 
      CopyFiles($CurrentDir, $dir); 
     } 
   } 
 } 

##CopyFiles 
sub CopyFiles{ 
    my $CurrentDir = $_[0]; 
    my $TargetDir = $_[1]; 
    my @list = (); 
    # ディレクトリ内のディレクトリ・ファイルを取得 
    opendir(DIR, "$CurrentDir/$TargetDir") or die("Can't get directory.:$CurrentDir($!)"); 
    @list = readdir(DIR); 
    closedir(DIR); 

    foreach my $file (@list){ 
      next if($file =~ /^\.{1,2}.*$/); 
      next if($file =~ /~/);
      #ファイルのみにマッチ 
      if(-f "$CurrentDir/$TargetDir/$file"){ 
         if($file =~ /$name/){ 
         #cpコマンドを利用
         my $cp = "cp $CurrentDir/$TargetDir/$file $CurrentDir/".TARGET_DIRECTORY; 
         system($cp) == 0 or die "Can't execute $cp: $!"; #ターミナル上での実行
       } 
     } 
   } 
 } 

#参考
以下の記事を参考にさせて頂きました。
https://www.eda-inc.jp/post-987/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?