このコマンドは、ファイルの名前を変更します。
$ find $PWD -name "*.jpg" | awk '{c=$0; gsub("/", "_", c)}{system("mv -v " $0 " " c)}'
`/home/pic/Pulpit/test/stary/1.jpg' -> `_home_pic_Pulpit_test_stary_1.jpg'
私はテストファイルを持っています:
$ ls
`[~!($%^_&*){.}\___"`]`1.jpg
........。
$ find -not -name .
./`[~!($%^_&*){.}\___"`]`1.jpg
ファイル名を変更したい:
$ find -not -name . | awk '{c=$0; gsub("/", "_", c)}{system("mv -v " $0 " " c)}'
/bin/sh: Syntax error: word unexpected (expecting ")")
が欲しいです:
_home_pic_Pulpit_test_stary_`[~!($%^_&*){.}\___"`]`1.jpg
ご協力ありがとうございました。
編集:
これは「gawk」では機能しますが、「mawk」では機能しません。
gawk(作品):
$ find -not -name . | gawk '{
> c=$0;
> gsub( "/", "_", c );
> c = gensub( /([[:punct:]])/, "\\\\&", "g", c );
> $0 = gensub( /([[:punct:]])/, "\\\\&", "g", $0 );
> system("echo mv -v " $0 " " c)}
> '
mv -v ./`[~!($%^_&*){.}\___"`]`1.jpg ._`[~!($%^_&*){.}\___"`]`1.jpg
mawk(動作しません):
$ find -not -name . | mawk '{
> c=$0;
> gsub( "/", "_", c );
> c = gensub( /([[:punct:]])/, "\\\\&", "g", c );
> $0 = gensub( /([[:punct:]])/, "\\\\&", "g", $0 );
> system("echo mv -v " $0 " " c)}
> '
mawk: line 8: function gensub never defined
mawk: line 8: function gensub never defined
gawk(作品):
$ find -not -name . | gawk '{
> gsub( /[[:punct:]]/, "\\\\&" );
> c = $0;
> gsub( /\//, "_", c );
> system( "echo mv -v " $0 " " c ) }
> '
mv -v ./`[~!($%^_&*){.}\___"`]`1.jpg ._`[~!($%^_&*){.}\___"`]`1.jpg
mawk(動作しません):
$ find -not -name . | mawk '{
> gsub( /[[:punct:]]/, "\\\\&" );
> c = $0;
> gsub( /\//, "_", c );
> system( "echo mv -v " $0 " " c ) }
> '
/bin/sh: Syntax error: word unexpected (expecting ")")
Ubuntu 10.10を使用していて、「mawk」をインストールしました。
'mawk'でそれを行う方法は?
編集-1:
別のフォーラムで、mawkの解決策を入手しました。
find $PWD -name "*.jpg" | mawk 'a=$0{gsub("/", "_")}{system("mv -v '"'"'" a "'"'"' '"'"'" $0 "'"'"'")}'