Perl
grep 參數列表太長
通常要在選擇的文件中搜尋和替換字元串,我會找到:
grep -rl 'pattern' .
除非您有很多匹配項,否則這很好用。
無論如何,我環顧四周,發現了一個使用的建議
find
:find /root/path -type f -exec grep -l 'FIND' {} +
這工作正常,但是當我嘗試將其傳遞給 Perl 進行替換時,我仍然得到錯誤:
perl -p -i -e 's|FIND|REPLACE|g' `find /root/path -type f -exec grep -l 'FIND' {} +` -bash: /usr/local/bin/perl: Argument list too long
有沒有辦法解決?
正如人們所建議的那樣,我需要編寫一個小腳本來為我做魔法:)
對我來說,我有很多文件——所以為了幫助加快速度(並使
find
伺服器上的文件更好一點),我將我的文件分成多個程序來處理更大的文件夾。所以腳本是:#!/usr/bin/perl my $find = q|string-to-find|; my $replace = q|replace-with|; my @paths = split /\n/, q|/home/user/folder1 /home/user/folder2 /home/user/folder3 /home/user/folder4|; my $debug = 1; foreach my $path (@paths) { my @files = split /\n/, `find $path -type f -exec grep -l '$find' {} +`; foreach (@files) { chomp; if (-f $_) { print qq|Doing $_\n| if $debug > 0; `sed -i 's/$find/$replace/g' $_` } } }
然後只需從 SSH 執行它:
perl script-name.cgi