find コマンドのデフォルト名から実行

find コマンドのデフォルト名から実行

次のディレクトリ構造があるとします。

test
test/a
test/b

.フォルダ内のファイルab

だから基本的に私はこのようなことを望み、素朴に試しました。

find test -type f -exec touch `basename {}` \;

ただ、これは空のファイルab親ディレクトリを生成しません。私のタッチコマンドが1つのパラメータしか取れないとしましょう。

これにより、次のディレクトリ構造が作成されます。

a
b
test
test/a
test/b

私はbashスクリプトでこれを行う方法を知っていますが、単一のコマンドソリューションに興味があります。

ベストアンサー1

バッシュを実行します。

find ... -exec bash -c 'touch "${1##*/}"' btouch {} \;

これ${1##*/}が意味するのは、aで終わる2番目のパラメータから最も長い一致を削除して、/最後のパラメータ以降のすべての項目を保持することです/

btouchアクティブなプロセスのリストに正しく表示されるように仮想名を使用できます(ps)。

おすすめ記事