पुन: सभी उप-निर्देशिकाओं में एक फ़ाइल जोड़ें


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 टच फ़ाइल {} \;
ChuckCottrill

1
या,find . -type d -exec touch {}/file\;
नेड6464

6

यदि आप केवल एक खाली फ़ाइल बनाना चाहते हैं, तो आप उपयोग कर सकते हैं touchऔर एक शेल ग्लोब। Zsh में:

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एक लूप में कॉल करना होगा । Zsh में:

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}"  \;

ध्यान दें कि टडकॉन के जवाब में ChuckCottrill द्वारा टिप्पणी काम नहीं करती है, क्योंकि यह केवल touchफ़ाइल को मौजूदा निर्देशिका में $ नाम और खुद निर्देशिका कहेगा ।

यह ओपी द्वारा अनुरोधित उपनिर्देशिकाओं में फाइलें नहीं बनाएगा, जबकि यहां यह संस्करण होगा।


0

वास्तव में सिर्फ एक फ़ाइल बनाने के लिए, आप इसके touchसाथ उपयोग कर सकते हैं find:

$ find . -type d -exec touch {}/file \;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.