#PHPでの解決方法
PHP
1<?php 2// 再帰的にファイルを取得(サブディレクトリ内のファイルも取得する) 3function getFiles($path) { 4 $result = array(); 5 6 foreach(glob($path . "/*") as $file) { 7 if(strpos($file, "2018-02") !== false) { 8 $newname = str_replace("2018-02", "2018-03", $file); 9 10 if(!file_exists($file) && !is_writable($file)) { 11 // そもそも対象のファイルが存在しているか・書き込みが可能なのか 12 echo "Error: You cannot write to $file", PHP_EOL; 13 exit(255); 14 } elseif(!is_writable(dirname($file))) { 15 // ディレクトリの書き込み権限を調べる 16 echo "Error: You cannot write to $file because you don't have write permission of directory", PHP_EOL; 17 exit(255); 18 } 19 rename($file, $newname); 20 chmod($newname, 0777); 21 $file = $newname; 22 } 23 if(is_dir($file)) { 24 $result = array_merge($result, getFiles($file)); 25 } 26 27 $result[] = basename($file); 28 } 29 30 return $result; 31} 32$path = dirname(__FILE__); 33getFiles($path);
###このコードの問題点
このコードをターミナルから実行する場合、ディレクトリに書き込み権限が無いと動きません。
特に今回解決できてない点として、仮想マシンで動かしてるLinuxとWindowsとの共有フォルダ
上のディレクトリ内のファイルを変更する場合、Linux側からディレクトリの権限を変更するにはどうすれば良いか分からなかったので、
共有フォルダ外からしかこのPHPファイルは実行できません。
なので、この質問に関して選ばせていただいたベストアンサーによる方法を取っていただくのが確実です。(動作検証済み)
#現状
PHPを使用して、特定のディレクトリ内に含まれる特定の文字列を含むファイルの名前を一括で変換するというコードを書きました。
特定のディレクトリとは、今回はコードを書いたphpファイルが置いてあるディレクトリになります。
PHP
1<?php 2// 再帰的にファイルを取得(サブディレクトリ内のファイルも取得する) 3function getFiles($path) { 4 $result = array(); 5 6 foreach(glob($path . "/*") as $file) { 7 if(strpos($file, "2018-02") !== false) { 8 $file = str_replace("2018-02", "2018-03", $file); 9 } 10 if(is_dir($file)) { 11 $result = array_merge($result, getFiles($file)); 12 } 13 14 $result[] = basename($file); 15 } 16 17 return $result; 18} 19 20$path = dirname(__FILE__); 21print_r(getFiles($path));
上記のPHPファイルをLinux上で実行してみると、下記のような結果を得られます。
[yashichi@localhost responsive_test]$ php index.php Array ( [0] => font-awesome.css [1] => font-awesome.min.css [2] => css [3] => fileNameChange.js [4] => FontAwesome.otf [5] => fontawesome-webfont.eot [6] => fontawesome-webfont.svg [7] => fontawesome-webfont.ttf [8] => fontawesome-webfont.woff [9] => fontawesome-webfont.woff2 [10] => fonts [11] => KAZTDSCF2550_TP_V.jpg [12] => images [13] => index.html [14] => index.php [15] => 2018-03.txt [16] => test1 [17] => 2018-03.txt [18] => test2 [19] => 2018-03.txt [20] => test3 [21] => test )
ファイル名に2018-02が含まれるもののファイル名を2018-03に書き換えるというもので、
ターミナル上の結果を見る限りは成功しているように見えます。
#解決できないこと
ターミナル上に表示される実行結果ではファイル名の置換に成功しているのですが、
実際にWindows上のエクスプローラーで該当のファイルを見ても、変化していません。
これは何が原因なのでしょうか...?
全く検討がつきません。
###補足情報(言語/FW/ツール等のバージョンなど)
PHP 7.1.4
CentOS 6.9
Windows10
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/03 14:39