পুনরাবৃত্তভাবে সমস্ত উপ ডিরেক্টরিতে একটি ফাইল যুক্ত করুন


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/প্রতিটিটিতে চালিত হবে।


বা, সন্ধান করুন। -প্রকার ডি-এক্সেক টাচ ফাইল {} \;
চককট্রিল

1
বা,find . -type d -exec touch {}/file\;
নেড Sep৪

6

আপনি যদি খালি ফাইল তৈরি করতে চান তবে আপনি touchএবং শেল গ্লোব ব্যবহার করতে পারেন । জেডএসে:

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

ব্যাশে:

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একটি লুপে কল করতে হবে । জেডএসে:

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

ব্যাশে:

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

Portably:

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

2

touchবর্তমান ডিরেক্টরিতে এবং সমস্ত উপ-ডিরেক্টরিতে $ নাম নামক ফাইলগুলি চাওয়ার সময় এটি কাজ করবে:

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

দ্রষ্টব্য যে টর্ডনের উত্তরের জন্য চককট্রিলের মন্তব্য কার্যকারী নয়, কারণ এটি কেবল touchবর্তমান ডিরেক্টরিতে এবং ডিরেক্টরিতে ডিরেক্টরিতে কেবল called নাম নামক ফাইলটি দেবে।

এটি ওপেনের অনুরোধ অনুসারে সাব-ডিরেক্টরিতে ফাইল তৈরি করবে না, যদিও এই সংস্করণটি এখানে থাকবে।


0

আসলে শুধু একটি ফাইল তৈরি করতে হলে, আপনি ব্যবহার করতে পারেন touchসঙ্গে find:

$ find . -type d -exec touch {}/file \;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.