2017-01-29 22 views
1

このfindコマンドで$ 1はどのように機能しますか?私はこれがどこで何をしているのかの事例や文書を見つけることができません。これは、「現在の作業ディレクトリ内のすべてのファイル拡張子を削除する」という質問から来ています。find execコマンドの変数

bash -c 'mv "$1" "${1%.*}"' - '/path/to/filename.ext' 

bashその後、実行:

find `pwd` -type f -exec bash -c 'mv "$1" "${1%.*}"' - '{}' \; 
+0

'find $(pwd)-type f ...' '' 'pwd' -type f ...' ''を見つけることは、多くの理由から好ましいです。現在の状況では、それほど重要ではありませんが、良い習慣を学ぶことは、問題が発生したときにあなたに利益をもたらすでしょう。 –

+0

それは素晴らしい点です!ありがとうございました! – Stats4224

+0

実際には、リテラルディレクトリ名が単語分割やパス名展開に従わずに使用されていることを確認するには、 'find" $(pwd) "..."を使用することをお勧めします。 – chepner

答えて

4

findによって実行される文字列は、それが見つかったファイルごとに

bash -c 'mv "$1" "${1%.*}"' - '{}' 

で、findが見つかりました。ファイルのパス名と{}を交換しますmv "$1" "${1%.*}"$0-に設定されていますll)、$1/path/to/filename.extに設定されています。 find `pwd`find .を言うために複雑な方法である:置換を適用した後、これは

mv /path/to/filename.ext /path/to/filename 

注意になります。

+0

入手しました。ありがとうございました!私はexecに追いついて、bash -cが何をしているのか分からなかった。 – Stats4224

+0

本当にそれをログインシェルにしていますか?私は 'bash -c'の' $ 0'がプロセスの名前として使われています。 –

+0

@BenjaminW:['man bash'](http://manpages.ubuntu.com/manpages/zesty/en/man1/bash.1.html):"ログインシェルは、引数がゼロの最初の文字が' - '、または '--login'オプションで始まったものです。 – AlexP

関連する問題