फ़ाइलों और निर्देशिकाओं को पहले निर्देशिकाओं के साथ कैसे सूचीबद्ध करें


22

मेरे दो सवाल हैं। सबसे पहले, कौन सी कमांड फाइलों और निर्देशिकाओं को सूचीबद्ध करती है, लेकिन पहले निर्देशिकाओं को सूचीबद्ध करती है?

दूसरा प्रश्न: मैं फ़ाइलों की एक सूची को एक निर्देशिका में कॉपी करना चाहता हूं, लेकिन लक्ष्य निर्देशिका को कमांड में पहला फ़ाइल नाम बनाते हैं।


5
lsएक --group-directories-firstस्विच है।
जसोनव्रीयन

1
-tसंभवतः एक GNU-only विकल्प है cpजो एक स्पष्ट लक्ष्य निर्देशिका लेता है और इसलिए शुरुआत सहित कमांड लाइन में कहीं भी जा सकता है।
jw013

जवाबों:


36

GNU मिला?

का गन्नू संस्करण lsहै --group-directories-first। और cpहै -t

जीएनयू नहीं?

सिस्टम की जरूरत नहीं है कि पर जीएनयू है ls, आपका सर्वश्रेष्ठ दांव लगातार दो कॉल करने के लिए है findके साथ -maxdepth n/ -mindepth nऔर -type tउचित विकल्पों के साथ।

find . -maxdepth 1 -mindepth 1 -type d
find . -maxdepth 1 -mindepth 1 \! -type d

फ़ाइलों को कॉपी करने के लिए, पहले लक्ष्य के साथ, आपको एक स्क्रिप्ट लिखनी होगी जो पहले तर्क को सहेजती है, फिर उपयोग करता है shift, और तर्क को अंत तक जोड़ता है।

#!/bin/sh
target="$1"
shift
cp -r -- "$@" "$target"

ध्यान रहे!

यदि आप इनका एक साथ उपयोग करने की योजना बना रहे थे - अर्थात, ( findया lsउपयोग करके xargs) से सूची एकत्र करना और इसे cp(या एक cpआवरण) से पास करना, तो आपको पता होना चाहिए कि फाइलों की पार्सिंग सूची (मूल रूप से, फ़ाइलनाम ) में क्या खतरे हो सकते हैं नई लिपि में ऐसे पात्र रखें जो आपकी स्क्रिप्ट को गड़बड़ कर सकते हैं)। विशेष रूप से, में नज़र findकी -execऔर -print0विकल्प और xargsके -0विकल्प।

कुशलता से निर्देशिका पेड़ों की नकल के लिए एक वैकल्पिक उपकरण।

आप rsyncइसके बजाय उपयोग में देखना चाहते हैं ; इसमें बहुत सारी कार्यक्षमता है जो आपके काम को आसान बना सकती है।


यह भी खूब रही। आम तौर पर, अगर मेरे पास जीएनयू संस्करण है, तो क्या यह जानने का कोई तरीका है? (विकल्प को आज़माने के अलावा --group-directories-first)।
एमिलियो वाज़केज़-रीना

3
आप यह ls --versionपता लगाने के लिए दौड़ सकते हैं कि आपके पास कौन सा है।
शॉन जे। गोफ

6

गैर-जीएनयू के लिए पहले लिस्टिंग निर्देशिका ls:

ls -l | sort

ध्यान दें, यह सहानुभूति, सॉकेट और पाइप जैसे अन्य अजीब सामानों के सभी गुच्छा को सूचीबद्ध करेगा (उचित रूप से समूहीकृत, निश्चित रूप से), लेकिन यह विचार करना काफी दुर्लभ है कि समस्या नहीं होनी चाहिए। अन्यथा फिल्टर होगाls -l | grep '^(-|d)' | sort


1
+1 स्वीकृत उत्तर की तुलना में चालाक और छोटा। सिवाय इसके कि यह वास्तव में होना चाहिए sort -r
PythonNut

1
ls -l | एक तरह से मेरे लिए काम नहीं किया MAC। यह पहले निर्देशिकाओं को समूहीकृत करता है, लेकिन इसने न तो उन्हें छांटा और न ही इसके बाद लगे फ़ाइलनामों को क्रमबद्ध किया।
रे

यह भी ध्यान दें: `का उपयोग कर | सॉर्ट` आपके रंग को हटा देगा क्योंकि यह अब पाठ है।
JayRizzo

4

बाश और zsh के लिए काम करता है

बस ~ / .bashrc या ~ / .zshrc में उपनाम जोड़ें

# Colorize the ls output ##
alias ls='LC_COLLATE=C ls -h --group-directories-first --color=auto'

इसके अलावा अगर आपके पास ZSH है, तो आप "k" उपयोगिता का उपयोग कर सकते हैं

k -h --group-directories-first

यहाँ छवि विवरण दर्ज करें

बस इसे ~ / .zshrc में डालकर, एंटीजन के साथ स्थापित करें

antigen bundle reduxionist/k --branch=add-sort-options

1
उर्फ की पेशकश करने के लिए अच्छा जवाब।
рüффп

0

के लिए zshके पूरा होने लिस्टिंग, आप सेट कर सकते हैं list-dirs-firstकरने के लिए शैली trueके लिए निर्देशिका पहले दिखाया जा सकता है। अपने में ~/.zshrc:

zstyle ':completion:*' list-dirs-first true

(यहां सभी पूर्ण विजेट्स पर लागू होता है जो इसका समर्थन करते हैं और सभी आदेशों के लिए; आप इसे प्रतिबंधित कर सकते हैं यदि आप चाहें, तो zstyleविवरण के लिए दस्तावेज देखें)

यदि आपने ऐसा पहले से नहीं किया है, तो compinstallविवरण, आदि और अन्य सभी उपहारों के साथ रंग में पूर्ण सूची प्राप्त करने के लिए दौड़ना सुनिश्चित करें ।


0

गैर-जीएनयू के लिए, awk अन्य सभी क्षेत्रों को फ़िल्टर कर सकता है:

ls -l | sort -r | awk 'NF==9 { if ($1~/^d/) { print $9 "/" } else { print $9 } }'
  • NF == 9: आउटपुट ls -lमें 9 फ़ील्ड होने चाहिए
  • यदि रेखा 'd' से शुरू होती है, तो एक अतिरिक्त '/' प्रिंट करता है
  • अन्यथा सिर्फ फ़ाइल नाम

आउटपुट जैसा दिखता है ls -1लेकिन पहली बार रखी गई निर्देशिकाओं के साथ:

node_modules/
src/
e2e/
angular.json
tslint.json
package.json
README.md

एलएस मैन पेज के "द लॉन्ग फॉर्मेट" के अनुसार, जब अन्य फ़ाइल प्रकार शामिल होते हैं, तो आउटपुट ऑर्डर होना चाहिए:

   s     Socket link.
   p     FIFO.
   l     Symbolic link.
   d     Directory.
   c     Character special file.
   b     Block special file.
   -     Regular file.

एक आसान बैश फ़ंक्शन (इसे अपने .bash_profile या .bashrc में डालें):

function l1() {
  ls -l $* | sort -r | awk 'NF==9 { if ($1~/^d/) { print $9 "/" } else { print $9 } }'
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.