18

大文字の名前が小文字に変換されるように、現在のディレクトリ内のすべてのファイルの名前を変更しようとしています。私はこのようにしようとしています:

ls -1|gawk '{print "`mv "$0" "tolower($0)"`"}'|xargs -i -t eval {}

ディレクトリにYとYY -tの2つのファイルがあり、デバッグ用に追加され、出力は次のとおりです。

eval `mv Y y`
xargs: eval: No such file or directory

eval を単独で実行すると、動作して Y が y に移動します。

これを達成する他の方法があることは知っていますが、可能であればこれを機能させたいと思います! 乾杯

4

4 に答える 4

27

evalはシェルの組み込みコマンドであり、スタンドアロンの実行可能ファイルではありません。したがって、xargs直接実行することはできません。あなたはおそらく欲しい:

ls -1 | gawk '{print "`mv "$0" "tolower($0)"`"}' | xargs -i -t sh -c "{}"
于 2010-11-11T12:28:38.220 に答える
4

xargs ソリューションを見ていますが、同じことを実行する別の方法を使用できますtr(sh/bash/ksh 構文を想定):

for i in *; do mv $i `echo $i | tr '[A-Z]' '[a-z]'`; done
于 2010-11-11T12:44:38.317 に答える
1

ファイルがクリエイティブ ユーザーによって作成された場合、次のようなファイルが表示されます。

My brother's 12" records

これまでのソリューションは、その種のファイルでは機能しません。GNU Parallel がインストールされている場合、これは機能します (クリエイティブな名前のファイルでも):

ls | parallel 'mv {} "$(echo {} | tr "[:upper:]" "[:lower:]")"'

詳細については、紹介ビデオをご覧ください: http://www.youtube.com/watch?v=OpaiGYxkSuQ

于 2011-01-09T21:59:14.827 に答える