すべてのサブディレクトリにファイルを再帰的に追加します


14

現在のディレクトリとすべてのサブディレクトリにファイルを再帰的に追加(またはタッチ)するにはどうすればよいですか?

たとえば、
私はこのディレクトリツリーを回したいと思います:

.
├── 1
   ├── A
   └── B
├── 2
   └── A
└── 3
    ├── A
    └── B
        └── I   
9 directories, 0 files

.
├── 1
   ├── A
      └── file
   ├── B
      └── file
   └── file
├── 2
   ├── A
      └── file
   └── file
├── 3
   ├── A
      └── file
   ├── B
      ├── file
      └── I
          └── file
   └── file
└── file

9 directories, 10 files

回答:


14

どうですか:

find . -type d -exec cp file {} \;

からman find

   -type c
          File is of type c:
           d      directory

   -exec command ;
          Execute  command;  All following arguments to find are taken 
          to be arguments to the command until an  argument  consisting 
          of `;' is encountered.  The string `{}' is replaced by the 
          current file

したがって、上記のコマンドはすべてのディレクトリを見つけてcp file DIR_NAME/、それぞれで実行します。


または、見つける。-type d -exec touch file {} \;
ChuckCottrill 2013年

1
またはfind . -type d -exec touch {}/file\;
Ned64

6

空のファイルを作成するだけの場合はtouch、シェルグロブを使用できます。zshの場合:

touch **/*(/e:REPLY+=/file:)

bashでは:

shopt -s globstar
for d in **/*/; do touch -- "$d/file"; done

移植性が高く、使用できますfind

find . -type d -exec sh -c 'for d; do touch "$d/file"; done' _ {} +

findすべてではないが一部の実装では、find . -type d -exec touch {}/file \;

参照コンテンツをコピーする場合findは、ループで呼び出す必要があります。zshの場合:

for d in **/*(/); do cp -p reference_file "$d/file"; done

bashでは:

shopt -s globstar
for d in **/*/; do cp -p reference_file "$d/file"; done

ポータブル:

find . -type d -exec sh -c 'for d; do cp -p reference_file "$d/file"; done' _ {} +

2

touch現在のディレクトリとすべてのサブディレクトリで$ nameと呼ばれるファイルが必要な場合、これは機能します。

find . -type d -exec touch {}/"${name}"  \;

ChuckCottrillによるterdonによる回答へのコメントtouchは、現在のディレクトリおよびディレクトリ自体にある$ nameというファイルのみであるため機能しないことに注意してください。

OPの要求に応じて、サブディレクトリにファイルを作成しませんが、このバージョンでは作成します。


0

実際には、単にファイルを作成するには、使用することができますtouchfind

$ find . -type d -exec touch {}/file \;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.