Linux

[linux] あるディレクトリの中のサブディレクトリ郡中のファイルのみに処理を行う

ディレクトリAの中にあるサブディレクトリ郡(多層構造)の中に入ってるファイルのみディレクトリAの中にあるresultディレクトリにコピーする

コマンド置換を使ってやってみる事に。
$(コマンド列) または `コマンド列`でシェル上にコマンドを展開した状態にする事ができる。
(“で囲むやり方は、後方互換性のために存在しているので、$()を使ったほうがいい)

たとえば
$ date +%Y%m%d で今日の日付が出力されるが

$ touch $(date +%Y%m%d).txt

とすると、20150605.txtと言ったファイルが出来上がる。
これを利用してやってみようかと思い

cp $(find . -type f) ./result
とするも上手く行かなかった。(原因不明)

それでまあ結論をいうと以下のコマンドでやりたかった事が実現できました。

find . -type f -exec cp {} ./result \;

find の -exec オプションを利用しました。

-exec command ;
command を実行する。コマンドの戻り値が 0 ならば真。
find のコマンドラインで指定されたこれ以降の引き数は、 `;’ を含む引き数にいたるまで、すべてcommand の引き数とみなされる。
文字列 `{}’ は現在処理しているファイル名に置き換えられる。
これは command 引き数のどこにあってもよく、単独で置かれていなくてもよい (単独で置かれていなければならないような find もある)。
これらの文字はシェルによって展開されないよう、 `\’ によってエスケープするか引用符で囲む必要がある。
コマンドは find を実行したディレクトリから実行される。

上の文章はこちらのサイトを参考にさせてもらいました
findのexecが便利 – マツモブログ

それで師匠のdyama氏からもうひとつの方法を教えてもらいました。

find . -type f | xargs -I{} cp “{}” result

xargsコマンドについてはこちらが詳しい
Linuxコマンド集 – 【xargs】標準入力から生成したコマンドラインを実行する:ITpro

つまり find. -type f の 結果 x 行数分が xargsに渡され -I{}によって”{}”に findの結果が展開されます。
-I{} はべつに -Iあ とかでもいい模様。
こっちのほうが綺麗に動作した感じありました。

dyama氏ありがとうございました。

氏の運営されているウェブサイトはこちら↓
dyama's page | There's more than one way to do it!

[linux] rubyのHTMLパーサーnokogiriのインストールでハマった件前のページ

[linux]Ubuntuで/etc/inittabがなくて困った件次のページ

関連記事

  1. Linux

    socket.ioの実装テスト

    node.jsを新しいプロジェクトに採用するにあたって、おさらい的な意…

  2. Compass

    Linux mint でcompassをインストールしようとすると失敗する件

    先日、rubyのCSSメタ言語であるsass-compassをインスト…

  3. Linux

    Linux MintのブートUSBを作成

    どうもこんにちは、ずいぶん冷え込む季節になってまいりました。皆さん…

  4. Tips

    検索エンジンにウェブサイトが認識(インデックス)
    されているか調べるコマンド

    いくら記事を書いたところで、検索エンジンに認識(インデックス)されない…

  5. Linux

    ロリポサーバーをパワーアップしたらSSH接続ができるようになったので鍵認証にした

    ロリポップのライトプランからスタンダードプランに変更したところ、SSH…

コメント

    • dyama
    • 2015年 6月 08日

    ブログ更新おつかれさまです!
    さっそくもりもり使ってますね〜!

    • 管理人
    • 2015年 6月 08日

    dyama師の導きによって今回の問題も解決する事ができました!ありがとうございます!
    今後ともモリモリ使わせてもらいます♪

  1. この記事へのトラックバックはありません。

PAGE TOP