Як я можу перевірити, чи існує каталог у сценарії оболонки Bash?


3721

Яку команду можна використовувати для перевірки існування каталогу чи ні в сценарії оболонки Bash?

Відповіді:


5147

Щоб перевірити, чи існує каталог у скрипті оболонки, ви можете скористатися наступним:

if [ -d "$DIRECTORY" ]; then
  # Control will enter here if $DIRECTORY exists.
fi

Або перевірити, чи не існує каталогу:

if [ ! -d "$DIRECTORY" ]; then
  # Control will enter here if $DIRECTORY doesn't exist.
fi

Однак, як зазначає Джон Еріксон , наступні команди можуть працювати не за призначенням, якщо ви не врахуєте, що символічне посилання на каталог також пройде цю перевірку. Наприклад, це:

ln -s "$ACTUAL_DIR" "$SYMLINK"
if [ -d "$SYMLINK" ]; then 
  rmdir "$SYMLINK" 
fi

Виведе повідомлення про помилку:

rmdir: failed to remove `symlink': Not a directory

Тому символічні посилання, можливо, повинні трактуватися по-різному, якщо наступні команди очікують, що каталоги:

if [ -d "$LINK_OR_DIR" ]; then 
  if [ -L "$LINK_OR_DIR" ]; then
    # It is a symlink!
    # Symbolic link specific commands go here.
    rm "$LINK_OR_DIR"
  else
    # It's a directory!
    # Directory command goes here.
    rmdir "$LINK_OR_DIR"
  fi
fi

Зверніть особливу увагу на подвійні лапки, що використовуються для обговорення змінних. Причину цього 8jean пояснює в іншій відповіді .

Якщо змінні містять пробіли чи інші незвичайні символи, це, ймовірно, спричинить збій сценарію.


29
Якщо ви хочете захистити його безпечно за допомогою інструментів GNU, --дуже рекомендується використовувати маркер кінця опцій. В іншому випадку, якщо ваша змінна містить щось, що схоже на опцію, сценарій вийде з ладу так само, як і пробілами.
Marc Mutz - mmutz

2
Для сучасних версій bash, ksh і т. Д. [...] є вбудований
fpmurphy

79
Майте на увазі одне: [ ! -d "$DIRECTORY" ]це буде істинним, або якщо $DIRECTORYйого немає, або якщо він існує, але не є каталогом. Розгляньте щось на кшталт if [ ! -d "$DIRECTORY" ] ; then mkdir "$DIRECTORY" ; fi; це не вдасться, якщо "$DIRECTORY"є файл. (Звичайно, ви повинні перевірити, чи mkdirвдалося це все-таки; є кілька причин, через які це може відбутися.)
Кіт Томпсон,

5
Можливо, варто згадати, що як тільки перевірка буде здійснена, ситуація може змінитися вже через інші процеси. У багатьох випадках краще просто створити або використати каталог і реагувати на помилку.
Альфе

12
Замість тестування як для каталогу ( -d), так і для символьної посилання ( -L), простіше просто додати косу рису до змінної, наприклад if [ -d "${THING:+$THING/}" ]. Довідник не заперечує додатковий нахил. Файл оцінюється як хибний. Порожній залишиться порожнім, таким неправдивим. І символьне посилання буде вирішено до місця призначення. Звичайно, це залежить від вашої мети. Якщо ви хочете туди поїхати , це добре. Якщо ви хочете її видалити , то код у цій відповіді краще.
ghoti

530

Не забудьте завжди загортати змінні у подвійні лапки, посилаючись на них у сценарії Bash. Діти в ці дні виростають з думкою, що вони можуть мати пробіли та безліч інших смішних символів у своїх іменах каталогу. (Пробіли! Ще в мої часи у нас не було фантазійних просторів!;))

Одного разу один із цих дітей запустить ваш сценарій із $DIRECTORYвстановленим на, "My M0viez"і ваш сценарій підірветься. Ти цього не хочеш. Тому використовуйте це.

if [ -d "$DIRECTORY" ]; then
    # Will enter here if $DIRECTORY exists, even if it contains spaces
fi

9
Ще одна причина використовувати подвійні лапки - якщо $ DIRECTORY з певних причин не встановлено.
Джон Еріксон

2
"завжди загортайте змінні у подвійні лапки ... в баш-скрипт." Для баш, технічно не потрібна при використанні [[...]]; див. tldp.org/LDP/abs/html/testconstructs.html#DBLBRACKETS (зауважте: розщеплення слів немає): "Розширення імен файлів або розбиття слів не відбувається між [[і]], але є розширення параметрів і заміна команд."
Майкл

2
Каталоги в Unix / Linux не повинні мати пробілів, і згодом сценарії не повинні бути адаптовані до нього. Це досить погано, що Windows підтримує це з усіма наслідками для сценаріїв Windows, але, будь ласка, з любові ні до чого, не потрібно вводити зайвих вимог.
tvCa

18
@tvCa Я вважаю, що користувачі, як правило, віддають перевагу більшої гнучкості у своїх іменах каталогу, а не змушують полегшувати розробникам речі. (Насправді, маючи справу з довгими іменами файлів, я вважаю, що ті, що не мають пробілів, є болем, оскільки це вбиває обгортання слів, навіть якщо я сам раніше страждав від того, щоб не рахувати шляхи з пробілами в скриптах та програмах.)
JAB

2
Ха. Пробіли - це лише символи, у яких зазвичай немає гліфів. У будь-якому випадку, ви можете уникнути їх нахилом.
uchuugaka

228

Зауважте, тест -d може дати несподівані результати:

$ ln -s tmp/ t
$ if [ -d t ]; then rmdir t; fi
rmdir: directory "t": Path component not a directory

Файл під заголовком: "Коли каталог не каталог?" Відповідь: "Коли це посилання на каталог." Трохи більш ретельний тест:

if [ -d t ]; then 
   if [ -L t ]; then 
      rm t
   else 
      rmdir t
   fi
fi

Додаткову інформацію можна знайти в посібнику Bash щодо умовних виразів Bash та [вбудованої команди та [[складних команд .


12
або, якщо припустити, що потрібно працювати лише над каталогами (і посилання можна ігнорувати) => if [ -d tmpdir -a ! -L tmpdir ]; then echo "is directory"; rmdir tmpdir; fi... або, для однієї команди, яка працює на обох посиланнях і режимах:rm -r tmpdir
michael

218

Я вважаю, що версія з подвійною дужкоюtest робить логічні тести написання більш природними:

if [[ -d "${DIRECTORY}" && ! -L "${DIRECTORY}" ]] ; then
    echo "It's a bona-fide directory"
fi

бо if [[ -d "$TARFILE" ]]я отримую [[: не знайдено
TheVillageIdiot

15
@TheVillageIdiot та @Hedgehog, ти використовуєш bash shell? Подвійна дужка не підтримується універсально. Ось так відповідь на цей момент: stackoverflow.com/questions/669452 / ...
yukondude

6
І в Busybox зола з типовими параметрами компіляції [[ ]]підтримується, але насправді не забезпечує жодної іншої функціональності [ ]. Якщо портативність викликає занепокоєння, дотримуйтесь [ ]та використовуйте необхідні способи вирішення.
сумнівним

6
... якщо ви використовуєте bash-конструкції в оболонковому скрипті, перший рядок сценарію повинен бути: #! / bin / bash (а не #! / bin / sh, ksh тощо)
michael

Використовуючи подвійні квадратні дужки в bash, вам не потрібно цитувати змінні.
Hubert Grzeskowiak

157

Коротша форма:

[ -d "$DIR" ] && echo "Yes"

6
Це працює так if $dir is a dir, then echo "yes":? Трохи пояснень допоможе :)
Martijn

5
cmd && otherце загальна стенограма для if cmd; then other; fi- це працює з більшістю мов програмування, які підтримують булеву логіку, і називається оцінкою короткого замикання .
tripleee

1
Поведінка не однакова set -e(що є найкращою практикою програмування оболонок ).
долмен

1
@dolmen the [ -d "$DIR" ]перевіряється (слідує за ним && echo Yes), тому я вважаю, що set -eце не має значення для поведінки сценарію (тобто, якщо тест не вдався, сценарій продовжується нормально).
tzot

132

Щоб перевірити, чи існує каталог, ви можете скористатися такою простою ifструктурою:

if [ -d directory/path to a directory ] ; then
# Things to do

else #if needed #also: elif [new condition]
# Things to do
fi

Ви також можете зробити це в мінус:

if [ ! -d directory/path to a directory ] ; then
# Things to do when not an existing directory

Примітка . Будьте уважні. Залиште порожні місця з обох боків як дужок відкривання, так і закриття.

З тим самим синтаксисом ви можете використовувати:

-e: any kind of archive

-f: file

-h: symbolic link

-r: readable file

-w: writable file

-x: executable file

-s: file size greater than zero

Чим це краще, ніж прийнята відповідь з 2008 року, окрім відмови від теми з перемикачами файлів?
Дан Даскалеску

краще, тому що [! -d каталог / шлях до каталогу]
user1855805

108
  1. Простий скрипт для перевірки наявності каталогу чи файлів:

    if [ -d /home/ram/dir ]   # For file "if [-f /home/rama/file]"
    then
        echo "dir present"
    else
        echo "dir not present"
    fi
  2. Простий скрипт для перевірки присутності каталогу чи ні:

    mkdir tempdir   # If you want to check file use touch instead of mkdir
    ret=$?
    if [ "$ret" == "0" ]
    then
        echo "dir present"
    else
        echo "dir not present"
    fi

    Вищеописані сценарії перевірять наявність каталогів чи ні

    $? якщо остання команда є успішною, вона повертає "0", інакше ненульове значення. Припустимо tempdir, вже присутній. Тоді mkdir tempdirз’явиться помилка, як показано нижче:

    mkdir: не вдається створити каталог 'tempdir': файл існує


4
Другий створив би каталог, якщо він не існував спочатку. Тоді це не бездумно.
Shihe Zhang

👆👆👆. 2-й здається небезпечним. Оскільки він створює довідник, навіть не вірно, що режисера немає.
Кріс

92

Можна використовувати test -d(див. man test).

-d file Щоправда, якщо файл існує і це каталог.

Наприклад:

test -d "/etc" && echo Exists || echo Does not exist

Примітка. testКоманда така ж, як і умовне вираження [(див. man [:), Тому вона є портативною через сценарії оболонки.

[- Це синонім testвбудованого, але останній аргумент повинен бути буквальним ], щоб відповідати відкриттю [.

Для можливих варіантів або додаткової допомоги перевірте:

  • help [
  • help test
  • man test або man [

55

Або для чогось абсолютно марного:

[ -d . ] || echo "No"

6
Він ніколи не надрукує "Ні". Поточний каталог завжди існує, якщо його не видалити іншим потоком або іншими способами.
Джахід

Ідеальний зразок :) враховуючи, що наскільки «унікальними» є деякі відповіді порівняно з прийнятою відповіддю
Сергій Саркісян

4
Чому це було порушено так багато разів? Це не відповідає на питання.
кодовий ліс


52

Ось дуже прагматична ідіома:

(cd $dir) || return # Is this a directory,
                    # and do we have access?

Я, як правило, перетворюю його на функцію:

can_use_as_dir() {
    (cd ${1:?pathname expected}) || return
}

Або:

assert_dir_access() {
    (cd ${1:?pathname expected}) || exit
}

Приємна річ у цьому підході, що мені не потрібно думати про гарне повідомлення про помилку.

cdдасть мені стандартне одно рядкове повідомлення до стандартної помилки . Це також дасть більше інформації, ніж я можу надати. Виконуючи cdвсередині підзаголовка ( ... ), команда не впливає на поточний каталог абонента. Якщо каталог існує, ця доподібна оболонка та функція є просто неопераційними.

Далі йде аргумент , що ми переходимо до cd: ${1:?pathname expected}. Це більш детальна форма заміни параметрів, яка більш докладно пояснюється нижче.

Tl; dr: Якщо рядок, переданий цій функції, порожній, ми знову виходимо з нижньої частини ( ... )і повертаємось із функції із поданим повідомленням про помилку.


Цитування зі ksh93сторінки man:

${parameter:?word}

Якщо parameter встановлено і є недійсним, то замініть його значення; в іншому випадку - друк wordта вихід із оболонки (якщо не інтерактивна). Якщо wordпропущено, тоді друкується стандартне повідомлення.

і

Якщо двокрапка :пропущена із наведених вище виразів, тоді оболонка перевіряє, встановлений чи ні параметр.

Фразування тут властиве документації оболонки, оскільки wordможе посилатися на будь-який розумний рядок, включаючи пробіл.

У цьому конкретному випадку я знаю, що стандартне повідомлення про помилку 1: parameter not setнедостатньо, тому я збільшую тип значення, яке ми очікуємо тут - pathnameкаталог.

Філософська примітка:

Оболонка не є об'єктно-орієнтованою мовою, тому повідомлення говорить pathname, що ні directory. На цьому рівні я вважаю за краще просто - аргументи функції є лише рядками.


Це більше, ніж лише перевірка наявності: Ця перевірка доступності на вашому рівні користувача. Так питання стоять лише для існування . Тож правильна відповідь, test -dяк пояснив @Grundlefleck.
Ф. Хаурі

7
@ F.Hauri - Він більше нічого не просив, це правда. Однак я виявив, що мені зазвичай потрібно знати більше, ніж це.
Хенк Лангевельд

І мені ніколи не спадало на думку, що жоден тест не може бути переконливим, якщо він не працює як root. test -d /unreadable/existsне вдасться, навіть якщо аргумент існує.
Хенк Лангевельд

36
if [ -d "$Directory" -a -w "$Directory" ]
then
    #Statements
fi

Вищевказаний код перевіряє, чи існує каталог і чи він піддається запису.


1
-а ідентичний за дією -е. Він був "застарілим", і його використання не рекомендується.
CousinCocaine

27
DIRECTORY=/tmp

if [ -d "$DIRECTORY" ]; then
    echo "Exists"
fi

Спробуйте в Інтернеті


пам'ятати spaceпісля [-> [`` -d . Я отримав помилку через відсутність місця
Радж

4
ПРОТИ , ця відповідь була дана вже у 2008 році з більш корисними поясненнями. Єдине нове тут - онлайн-майданчик.
Дан Даскалеску


21

Більше функцій із використанням find

  • Перевірте наявність папки в підкаталогах:

    found=`find -type d -name "myDirectory"`
    if [ -n "$found"]
    then
        # The variable 'found' contains the full path where "myDirectory" is.
        # It may contain several lines if there are several folders named "myDirectory".
    fi
  • Перевірте наявність однієї або декількох папок на основі шаблону в поточному каталозі:

    found=`find -maxdepth 1 -type d -name "my*"`
    if [ -n "$found"]
    then
        # The variable 'found' contains the full path where folders "my*" have been found.
    fi
  • Обидві комбінації. У наступному прикладі він перевіряє наявність папки в поточному каталозі:

    found=`find -maxdepth 1 -type d -name "myDirectory"`
    if [ -n "$found"]
    then
        # The variable 'found' is not empty => "myDirectory"` exists.
    fi

Привіт Ніл. Ваша ідея може бути корисно , щоб перевірити наявність каталогів в залежності від малюнка , як: find -maxdepth 1 -type d -name 'pattern'. Ви не заперечуєте, якщо я додаю у вашій відповіді цю хитрість? Ура;)
олібре

20

Насправді вам слід скористатися кількома інструментами, щоб отримати бронезахисний підхід:

DIR_PATH=`readlink -f "${the_stuff_you_test}"` # Get rid of symlinks and get abs path
if [[ -d "${DIR_PATH}" ]] ; Then # Now you're testing
    echo "It's a dir";
fi

Не потрібно хвилюватися про пробіли та спеціальні символи, поки ви користуєтесь "${}".

Зауважте, що [[]]це не так портативно [], але, оскільки більшість людей працює з сучасними версіями Bash (адже зрештою, більшість людей навіть не працює з командним рядком :-p), користь більша, ніж проблема.


17

Чи думали ви просто робити все, що хочете зробити, ifа не дивитися, перш ніж стрибати?

Тобто, якщо ви хочете перевірити наявність каталогу перед тим, як ввести його, спробуйте просто зробити це:

if pushd /path/you/want/to/enter; then
    # Commands you want to run in this directory
    popd
fi

Якщо шлях, який ви надаєте, pushdіснує, ви введете його, і він вийде з 0, а це означає, що thenчастина оператора буде виконана. Якщо його не існує, нічого не відбудеться (крім деякого виводу, який говорить про те, що каталог не існує, що, мабуть, є корисним побічним ефектом у будь-якому випадку для налагодження).

Це здається кращим, ніж це, що вимагає повторення:

if [ -d /path/you/want/to/enter ]; then
    pushd /path/you/want/to/enter
    # Commands you want to run in this directory
    popd
fi

Те ж саме працює з cd, mv, rmі т.д. ... якщо ви спробуєте їх на файли , які не існують, вони будуть виходити з помилкою і роздрукувати повідомлення про те , що не існує, і ваш thenблок буде пропущений. Якщо ви спробуєте їх у файлах, які існують, команда виконає та вийде зі статусом 0, що дозволить вашому thenблоку виконуватись.


2
pushd - це найелегантніший спосіб зробити це. Я збирався опублікувати це як відповідь :)
melMass

15

Щоб перевірити більше одного каталогу, використовуйте цей код:

if [ -d "$DIRECTORY1" ] && [ -d "$DIRECTORY2" ] then
    # Things to do
fi

як ви можете перевірити його відсутність?
perrohunter


15
[[ -d "$DIR" && ! -L "$DIR" ]] && echo "It's a directory and not a symbolic link"

Примітка: Цитування змінних є хорошою практикою.

Пояснення:

  • -d: перевірте, чи це каталог
  • -L: перевірити, чи це символічне посилання

Пояснення буде в порядку ( редагуючи свою відповідь , а не тут, у коментарях).
Пітер Мортенсен


11

Ця відповідь завершилася як сценарій оболонки

Приклади

$ is_dir ~                           
YES

$ is_dir /tmp                        
YES

$ is_dir ~/bin                       
YES

$ mkdir '/tmp/test me'

$ is_dir '/tmp/test me'
YES

$ is_dir /asdf/asdf                  
NO

# Example of calling it in another script
DIR=~/mydata
if [ $(is_dir $DIR) == "NO" ]
then
  echo "Folder doesnt exist: $DIR";
  exit;
fi

is_dir

function show_help()
{
  IT=$(CAT <<EOF

  usage: DIR
  output: YES or NO, depending on whether or not the directory exists.

  )
  echo "$IT"
  exit
}

if [ "$1" == "help" ]
then
  show_help
fi
if [ -z "$1" ]
then
  show_help
fi

DIR=$1
if [ -d $DIR ]; then 
   echo "YES";
   exit;
fi
echo "NO";

10

За допомогою -eчека перевіряється наявність файлів, і це включає каталоги.

if [ -e ${FILE_PATH_AND_NAME} ]
then
    echo "The file or directory exists."
fi

1
І не відповідає правильно на питання ОП - це каталог?
Марк Стюарт

8

Відповідно до коментаря Джонатана :

Якщо ви хочете створити каталог, а він ще не існує, тоді найпростіша методика полягає у використанні, mkdir -pяка створює каталог - і будь-які відсутні каталоги на шляху - і не виходить з ладу, якщо каталог вже існує, тому ви можете це все зробити одразу з:

mkdir -p /some/directory/you/want/to/exist || exit 1

7
if [ -d "$DIRECTORY" ]; then
    # Will enter here if $DIRECTORY exists
fi

Це не зовсім вірно ...

Якщо ви хочете перейти до цього каталогу, вам також потрібно мати права виконання на каталог. Можливо, вам також потрібно мати права на запис.

Тому:

if [ -d "$DIRECTORY" ] && [ -x "$DIRECTORY" ] ; then
    # ... to go to that directory (even if DIRECTORY is a link)
    cd $DIRECTORY
    pwd
fi

if [ -d "$DIRECTORY" ] && [ -w "$DIRECTORY" ] ; then
    # ... to go to that directory and write something there (even if DIRECTORY is a link)
    cd $DIRECTORY
    touch foobar
fi

7

Використовуйте fileпрограму. Враховуючи, що всі каталоги також є файлами в Linux, вистачить наступної команди:

file $directory_name

Перевірка неіснуючого файлу: file blah

Вихід: cannot open 'blah' (No such file or directory)

Перевірка наявного каталогу: file bluh

Вихід: bluh: directory


1
Хороша ідея, але занадто погана в обох випадках команда файлу завжди повертає 0 код виходу. Також, коли файл / каталог не можна знайти :(.
небезпека89

6

lsКоманда в поєднанні з -l(довгий список) повертає опціонних атрибути інформації про файлах і каталогах.
Зокрема, першим символом ls -lвиводу це, як правило, dабо a -(тире). У випадку dперерахованого - це каталог точно.

Наступна команда лише в одному рядку підкаже, чи ISDIRмістить вказана змінна шлях до каталогу чи ні:

[[ $(ls -ld "$ISDIR" | cut -c1) == 'd' ]] &&
    echo "YES, $ISDIR is a directory." || 
    echo "Sorry, $ISDIR is not a directory"

Практичне використання:

    [claudio@nowhere ~]$ ISDIR="$HOME/Music" 
    [claudio@nowhere ~]$ ls -ld "$ISDIR"
    drwxr-xr-x. 2 claudio claudio 4096 Aug 23 00:02 /home/claudio/Music
    [claudio@nowhere ~]$ [[ $(ls -ld "$ISDIR" | cut -c1) == 'd' ]] && 
        echo "YES, $ISDIR is a directory." ||
        echo "Sorry, $ISDIR is not a directory"
    YES, /home/claudio/Music is a directory.

    [claudio@nowhere ~]$ touch "empty file.txt"
    [claudio@nowhere ~]$ ISDIR="$HOME/empty file.txt" 
    [claudio@nowhere ~]$ [[ $(ls -ld "$ISDIR" | cut -c1) == 'd' ]] && 
        echo "YES, $ISDIR is a directory." || 
        echo "Sorry, $ISDIR is not a directoy"
    Sorry, /home/claudio/empty file.txt is not a directory

+1, але якщо ISDIR взагалі не існує, ви отримуєте повідомлення про помилку, а також ваше діагностичне повідомлення.
ysap


5

Якщо ви хочете перевірити, чи існує каталог, незалежно від того, справжній це каталог чи символьне посилання, скористайтеся цим:

ls $DIR
if [ $? != 0 ]; then
        echo "Directory $DIR already exists!"
        exit 1;
fi
echo "Directory $DIR does not exist..."

Пояснення: Команда "ls" видає помилку "ls: / x: Немає такого файлу чи каталогу", якщо каталог або symlink не існує, а також встановлює код повернення, який ви можете отримати через "$?", На не -null (зазвичай "1"). Не забудьте перевірити код повернення безпосередньо після виклику "ls".


3
Ви також можете скористатися цією коротшою версією:if ! ls $DIR 2>/dev/null; then echo "$DIR does not exist!"; fi
derFunk

5

(1)

[ -d Piyush_Drv1 ] && echo ""Exists"" || echo "Not Exists"

(2)

[ `find . -type d -name Piyush_Drv1 -print | wc -l` -eq 1 ] && echo Exists || echo "Not Exists"

(3)

[[ -d run_dir  && ! -L run_dir ]] && echo Exists || echo "Not Exists"

Якщо проблема виявлена ​​за одним із запропонованих вище підходів:

З lsкомандою; у випадках, коли каталог не існує - відображається повідомлення про помилку

[[ `ls -ld SAMPLE_DIR| grep ^d | wc -l` -eq 1 ]] && echo exists || not exists

-ksh: не: не знайдено [Немає такого файлу чи каталогу]


На що йдеться "вище"? Три командні рядки у цій відповіді чи попередніх відповідях? (Будь ласка, відповідайте, відредагувавши свою відповідь , а не тут у коментарях. Дякую заздалегідь.)
Пітер Мортенсен

4

Там є чудові рішення, але в кінцевому підсумку кожен сценарій вийде з ладу, якщо ви не в потрібному каталозі. Тож код таким чином:

if [ -d "$LINK_OR_DIR" ]; then
if [ -L "$LINK_OR_DIR" ]; then
    # It is a symlink!
    # Symbolic link specific commands go here
    rm "$LINK_OR_DIR"
else
    # It's a directory!
    # Directory command goes here
    rmdir "$LINK_OR_DIR"
fi
fi

буде успішно виконано лише в тому випадку, якщо на момент виконання ви знаходитесь в каталозі, в якому є підкаталог, на який ви маєте перевіритись.

Я розумію початкове запитання таким чином: перевірити, чи існує каталог незалежно від положення користувача у файловій системі. Тож використання команди «знайти» може зробити трюк:

dir=" "
echo "Input directory name to search for:"
read dir
find $HOME -name $dir -type d

Це рішення хороше тим, що дозволяє використовувати підстановку, корисну функцію при пошуку файлів / каталогів. Єдина проблема полягає в тому, що якщо шуканий каталог не існує, команда 'find' нічого не надрукує до стандартного виводу (не елегантне рішення на мій смак) і тим не менше матиме нульовий вихід. Можливо, хтось міг би покращити це.


13
Я був би ображений, якби програма переглянула весь мій жорсткий диск, щоб знайти каталог, а не просто ввічливо зазирнув у мій поточний робочий каталог або використовуючи абсолютний шлях, який я йому даю. Те, що ви запропонували, може бути приємним для інструменту з назвою, locateале не приємно ні для чого іншого ...
sarnold
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.