ディレクトリ構造からすべてのファイルを削除しようとするphpスクリプトがありますが、すべてをsvnに保持します。私はこのコマンドをオンラインで見つけました。これは、シェルに直接接続すると完全に機能します。
find /my/folder/path/ -path \'*/.svn\' -prune -o -type f -exec rm {} +
残念ながら、次のようにそのコマンドでphpでshell_execを実行すると、次のようになります。
$cmd = 'find $folderPath -path \'*/.svn\' -prune -o -type f -exec rm {} +';
shell_exec($cmd);
次に、phpスクリプトを呼び出す現在のディレクトリ内のすべてのファイルも削除されます。
誰かが理由と、問題を修正してphpスクリプトを修正して期待どおりに動作し、指定されたフォルダー内のファイルのみを削除できるようにする方法を説明できますか?
完全なソースコードを以下に示します。これは、私が見逃したばかげた間違いがあった場合に備えてです。
<?php
# This script simply removes all files from a specified folder, that aren't directories or .svn
# files. It will see if a folder path was given as a cli parameter, and if not, ask the user if they
# want to remove the files in their current directory.
$execute = false;
if (isset($argv[1]))
{
$folderPath = $argv[1];
$execute = true;
}
else
{
$folderPath = getcwd();
$answer = readline("Remove all files but not folders or svn files in $folderPath (y/n)?" . PHP_EOL);
if ($answer == 'Y' || $answer == 'y')
{
$execute = true;
}
}
if ($execute)
{
# Strip out the last / if it was given by accident as this can cause deletion of wrong files
if (substr($folderPath, -1) != '/')
{
$folderPath .= "/";
}
print "Removing files from $folderPath" . PHP_EOL;
$cmd = 'find $folderPath -path \'*/.svn\' -prune -o -type f -exec rm {} +';
shell_exec($cmd);
}
else
{
print "Ok not bothering." . PHP_EOL;
}
print "Done" . PHP_EOL;
?>