वर्तमान निर्देशिका में सब कुछ को एक उपनिर्देशिका में कॉपी करने के लिए मैं लिनक्स टर्मिनल का उपयोग कैसे कर सकता हूं?
वर्तमान निर्देशिका में सब कुछ को एक उपनिर्देशिका में कॉपी करने के लिए मैं लिनक्स टर्मिनल का उपयोग कैसे कर सकता हूं?
जवाबों:
यदि आप फ़ोल्डर की सामग्री को पुनरावर्ती रूप से कॉपी करना चाहते हैं (1 त्रुटि फेंक देंगे, तो नीचे दिए गए विकल्प):
cp -r * sub/
थोड़ा अधिक हैकी, लेकिन गैर-खाली उपनिर्देशिकाओं पर काम करता है:
TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"
एक और ऑनलाइनर:
TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done
या पुनरावर्ती:
TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done
find
कोड से संतुष्ट हूं : D
xargs
या -exec
। कोई ज़रूरत नहीं है grep
- उपयोग ! -name "$TARGETDIR"
या समान। आपके पास बेजोड़ उद्धरण हैं $file
। मुझे नहीं लगता कि एक पुनरावर्ती cp
आपके किसी भी कार्य को पूरा करने के तरीके पर काम करेगा।
target
यदि आपका लक्ष्य बैश है तो मान लेना लक्ष्य उपनिर्देशिका का नाम है:
shopt -s extglob
cp -r !(target) target/
Ksh में, आप सीधे कर सकते हैं cp -r !(target) target/
।
Zsh में, आप setopt ksh_glob
तब कर सकते हैं cp -r !(target) target/
। एक और संभावना setopt extended_glob
तब है cp -r ^target target/
।
मैं स्रोत निर्देशिका के बाहर लक्ष्य निर्देशिका को स्थानांतरित करने का सुझाव दूंगा और फिर इसे वापस रखूंगा; mv मुफ़्त है (यदि आप सावधानी से एक अलग फाइल सिस्टम में जाने के लिए नहीं), जब तक कि आप अन्य प्रक्रियाओं से हस्तक्षेप करने / हस्तक्षेप करने की उम्मीद नहीं कर रहे हैं।
यदि फ़ाइलनाम में स्थान हैं, तो ऊपर पोस्ट किए गए अधिकांश समाधान काम नहीं करेंगे। मैं सुझाव के वेरिएंट का उपयोग करने का सुझाव देता हूं -print0 | xargs -0, या खोज -exec, आदि।
क्या यह आपके लिए काम करेगा?
cp -r * subdir/
यदि आप वर्तमान dir में सब कुछ एक उपनिर्देशिका में कॉपी करने के बजाय स्थानांतरित करना चाहते हैं, तो आप यह कर सकते हैं:
mv * subdir/
यह सब कुछ कॉपी करेगा, जिसमें डॉट फाइल्स भी शामिल हैं, न कि टारगेट डायरेक्टरी को ही, टारगेट डायरेक्टरी को शामिल करने के लिए SUBDIR
:
for i in `ls -a | grep -Ev '^(SUBDIR|\.\.?)$'`; do cp $i SUBDIR; done
यह कहता है फ़ाइल dirCopy.sh में जाती है
for i in `ls`
do
if [ $i != "subDir" ]
then
`cp -r $i subDir`
fi
done
अपने कंसोल में इसे "sh dirCopy.sh" के रूप में चलाएं
ls
: for file in *
। Backticks के लिए कोई ज़रूरत नहीं है - उपयोग $()
। कमांड के $()
चारों ओर बैकटिक्स (या ) की कोई आवश्यकता नहीं है cp
(जो एक त्रुटि संदेश देगा)।