私はディレクトリ内のファイルを見つけるためにfindコマンドを使用しています。私は、ディレクトリ内のファイルが空でない(0のサイズでない)かどうかを確認してから処理を進めたいと思います。私はPerlコードで作業しています。私が得ることができるのは、 "find"コマンドマニュアルから空のファイルサイズをチェックするための "空"です。空でないファイルをチェックする方法を知っていますか?前もって感謝します。Perlで空でないファイルをチェックする方法
答えて
perldoc perlfunc -X
を参照して、Perlファイルテストオペレーターをリフレッシュしてください。私は、出力がコンソールに行く必要があり、この例では
#!/usr/bin/perl -w
use strict;
use File::Find;
# $ARGV[0] is the first command line argument
my $startingDir = $ARGV[0];
finddepth(\&wanted, $startingDir);
sub wanted
{
# if current path is a file and non-empty
if (-f $_ && -s $_)
{
# print full path to the console
print $File::Find::name . "\n";
}
}
:File::Find
の使用方法を示す
-s File has nonzero size (returns size in bytes).
シンプルなスクリプト:何が欲しいのはこれです。これをファイルにパイプするには、シェル出力のリダイレクトを使用するだけです。 ./findscript.pl /some/dir > somefile.out
。
ありがとうbobbymcr、はい私はWebから-sオプションを使って読みましたが、コードにどのように適用するかはわかりません。私は、 "findn $ dir -type f"などのfindコマンドを使用しています。このエラーをプロンプトしたままで-sオプションを挿入する方法がわからない "find:無効な述語' -s '"if私は行にthオプションを挿入します。 – Grace
@Grace:しないでください。 Perlを使用している場合、Perlの 'find'コマンドの' File :: Find'コマンドを使用してください。こちらをご覧ください:http://perldoc.perl.org/File/Find.html – bobbymcr
sub get_DIR {my($ dir)= @_; File :: Basenameを使用します。ファイル::検索を使用します。定数DIR => "$ dir"を使用します。 finddepth(\&wanted、DIR)> "tmp1"; sub wanted {もしそうでなければ返す-f $ _; if(存在しない$ file_hash {$ _}){$ file_hash {$ _} = []; } push @ {$ file_hash {$ _}}、$ File :: Find :: dir; } foreach my $ basename(@ {$ file_hash {$ _}}){open FH、 '> log' or die $ !; $ basename = basename($ _); FH "$ basename \ n"を出力します。 } chmod(0750、 "log");クローズ(FH); } – Grace
、findコマンドの場合はperldoc http://perldoc.perl.org/functions/-X.html
-z File has zero size (is empty).
こんにちはrpg、空でないファイルはチェックしますが、空のファイルはチェックしません。あなたの反応のために。 – Grace
を見ているだけ追加してください! before -empty: 'dirpath -type fを見つけよう! -empty ' – Shalini
こんにちはシャリーニ、ありがとう、あなたのサンプルコマンドと私は魔法をやった!実際これの前に私は "空の"オプションを試し続けましたが、感嘆符とマイナスの間のスペースを逃してしまい、 "find:invalid predicate'!-empty "というエラーが出ました。ちょうどスペースと..すべてが私が望むように行く。ありがとう!! – Grace