බාෂ් ෂෙල් ස්ක්රිප්ට් එකක් තුළ ඩිරෙක්ටරියක් තිබේද නැද්ද යන්න පරීක්ෂා කිරීමට භාවිතා කළ හැකි විධානය කුමක්ද?
බාෂ් ෂෙල් ස්ක්රිප්ට් එකක් තුළ ඩිරෙක්ටරියක් තිබේද නැද්ද යන්න පරීක්ෂා කිරීමට භාවිතා කළ හැකි විධානය කුමක්ද?
Answers:
ෂෙල් ස්ක්රිප්ට් එකක ඩිරෙක්ටරියක් තිබේදැයි පරීක්ෂා කිරීමට, ඔබට පහත සඳහන් දෑ භාවිතා කළ හැකිය:
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
විචල්යයන් එතීමට භාවිතා කරන ද්විත්ව උපුටා දැක්වීම් විශේෂයෙන් සැලකිල්ලට ගන්න. මේ සඳහා හේතුව තවත් පිළිතුරකින් 8 ජීන් විසින් පැහැදිලි කර ඇත .
විචල්යයන් තුළ අවකාශ හෝ වෙනත් අසාමාන්ය අක්ෂර තිබේ නම් එය බොහෝ විට ස්ක්රිප්ට් අසමත් වීමට හේතු වේ.
[ ! -d "$DIRECTORY" ]
සැබෑ වනු ඇත එක්කෝ නම් $DIRECTORY
නොපවතියි, හෝ නම් කරන්නේ පවතින නමුත් එය ඩිරෙක්ටරියක් නො වේ. වැනි දෙයක් සලකා බලන්න if [ ! -d "$DIRECTORY" ] ; then mkdir "$DIRECTORY" ; fi
; "$DIRECTORY"
ගොනුවක් නම් මෙය අසාර්ථක වනු ඇත . (ඇත්ත වශයෙන්ම ඔබ mkdir
කෙසේ හෝ සාර්ථක වී ඇත්දැයි පරීක්ෂා කර බැලිය යුතුය ; එය අසාර්ථක වීමට හේතු ගණනාවක් තිබේ.)
-d
) සහ සිම්ලින්ක් ( -L
) යන දෙකම පරීක්ෂා කිරීම වෙනුවට , විචල්යයට කප්පාදුවක් එකතු කිරීම පහසුය if [ -d "${THING:+$THING/}" ]
. ඩිරෙක්ටරියක් අමතර කප්පාදුව ගැන තැකීමක් නොකරයි. ගොනුවක් අසත්යයට තක්සේරු කරනු ඇත. හිස් හිස් වනු ඇත, එබැවින් අසත්ය. එහි ගමනාන්තයට සිම්ලින්ක් එකක් විසඳනු ඇත. ඇත්ත වශයෙන්ම, එය ඔබගේ ඉලක්කය මත රඳා පවතී. ඔබට එහි යාමට අවශ්ය නම් මෙය හොඳයි. ඔබට එය මකා දැමීමට අවශ්ය නම් , මෙම පිළිතුරේ කේතය වඩා හොඳය.
Bash ස්ක්රිප්ට් එකක යොමු කිරීමේදී විචල්යයන් ද්විත්ව මිල ගණන් වලින් ඔතා තැබීමට මතක තබා ගන්න. මේ දිනවල ළමයින් වැඩෙන්නේ ඔවුන්ගේ නාමාවලි නාමවල අවකාශ සහ වෙනත් විහිලු චරිත තිබිය හැකිය යන අදහසිනි. (අවකාශය! මගේ කාලයේ, අපට විසිතුරු අවකාශයක් නොතිබුණි!;))
යම් දවසක, එම ළමයින්ගෙන් එක් අයෙකු ඔබගේ ස්ක්රිප්ට් එක $DIRECTORY
සකසා ඇති "My M0viez"
අතර ඔබේ ස්ක්රිප්ට් එක පුපුරා යනු ඇත. ඔබට එය අවශ්ය නැත. එබැවින් මෙය භාවිතා කරන්න.
if [ -d "$DIRECTORY" ]; then
# Will enter here if $DIRECTORY exists, even if it contains spaces
fi
-D පරීක්ෂණයෙන් පුදුම සහගත ප්රති results ල ලබා ගත හැකි බව සලකන්න :
$ 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 අත්පොතෙන් ඔබට වැඩි විස්තර සොයාගත හැකිය .
if [ -d tmpdir -a ! -L tmpdir ]; then echo "is directory"; rmdir tmpdir; fi
... හෝ, සබැඳි සහ ඩයර්ස් යන දෙකෙහිම ක්රියාත්මක වන එක් විධානයක් සඳහා:rm -r tmpdir
තාර්කික පරීක්ෂණ ලිවීම වඩාත් ස්වාභාවික බවට පත්කිරීමේ ද්විත්ව වරහන අනුවාදය මට පෙනේ test
:
if [[ -d "${DIRECTORY}" && ! -L "${DIRECTORY}" ]] ; then
echo "It's a bona-fide directory"
fi
if [[ -d "$TARFILE" ]]
මම අරගෙන යනවා [[: සොයා ගැනීමට නොහැකි
[[ ]]
සඳහා සහය දක්වයි, නමුත් ඇත්ත වශයෙන්ම ඊට වෙනස් ක්රියාකාරිත්වයක් සපයන්නේ නැත [ ]
. අතේ ගෙන යා හැකි බව සැලකිලිමත් වන්නේ නම්, [ ]
අවශ්ය ක්රියාමාර්ග සමඟ බැඳී සිටින්න .
කෙටි ආකෘතිය:
[ -d "$DIR" ] && echo "Yes"
if $dir is a dir, then echo "yes"
? ටිකක් පැහැදිලි කිරීමක් උපකාරී වනු ඇත :)
cmd && other
සඳහා පොදු කෙටිමං වේ if cmd; then other; fi
- මෙය බූලියන් තර්කනයට සහය දක්වන බොහෝ ක්රමලේඛන භාෂාවන් සමඟ ක්රියා කරන අතර එය කෙටි පරිපථ ඇගයීම ලෙස හැඳින්වේ .
set -e
(එය ෂෙල් ක්රමලේඛනය හොඳම පුහුණුවකි ).
[ -d "$DIR" ]
පරීක්ෂා කර ඇත (පසුව && echo Yes
), එබැවින් set -e
ස්ක්රිප්ට් හැසිරීමට කිසිදු වෙනසක් සිදු නොවන බව මම විශ්වාස කරමි (එනම් පරීක්ෂණය අසමත් වුවහොත් ස්ක්රිප්ට් සාමාන්යයෙන් ඉදිරියට යයි).
නාමාවලියක් තිබේදැයි පරීක්ෂා කිරීමට ඔබට if
මෙවැනි සරල ව්යුහයක් භාවිතා කළ හැකිය :
if [ -d directory/path to a directory ] ; then
# Things to do
else #if needed #also: elif [new condition]
# Things to do
fi
ඔබට එය negative ණාත්මකව කළ හැකිය:
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
නාමාවලියක් හෝ ගොනුවක් තිබේද නැද්ද යන්න පරීක්ෂා කිරීම සඳහා සරල පිටපතක්:
if [ -d /home/ram/dir ] # For file "if [-f /home/rama/file]"
then
echo "dir present"
else
echo "dir not present"
fi
නාමාවලිය තිබේද නැද්ද යන්න පරීක්ෂා කිරීම සඳහා සරල පිටපතක්:
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' නාමාවලිය සෑදිය නොහැක: ගොනුව පවතී
ඔබට භාවිතා කළ හැකිය test -d
(බලන්න man test
).
-d file
ගොනුවක් තිබේ නම් එය නාමාවලියකි.
උදාහරණයක් වශයෙන්:
test -d "/etc" && echo Exists || echo Does not exist
සටහන: test
විධානය කොන්දේසි සහිත ප්රකාශනයකට සමාන වේ [
(බලන්න :) man [
, එබැවින් එය ෂෙල් ස්ක්රිප්ට් හරහා අතේ ගෙන යා හැකිය.
[
- මෙයtest
බිල්ඩින් සඳහා සමාන පදයකි, නමුත් අවසාන තර්කය, විවරයට]
ගැලපෙන පරිදි වචනාර්ථයෙන් විය යුතුය[
.
හැකි විකල්ප හෝ වැඩිදුර උදව් සඳහා, පරීක්ෂා කරන්න:
help [
help test
man test
හෝ man [
හෝ සම්පූර්ණයෙන්ම නිෂ් less ල දෙයක් සඳහා:
[ -d . ] || echo "No"
මෙන්න ඉතා ප්රායෝගික මෝඩකමක්:
(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
මෑන් පිටුවෙන් උපුටා දැක්වීම :
${parameter:?word}
නම්
parameter
තබා නොවන ශූන්ය වේ නම් එහි අගය ආදේශ; එසේword
නොමැතිනම් , කවචයෙන් මුද්රණය කර පිටවන්න (අන්තර්ක්රියාකාරී නොවේ නම්).word
මඟ හැරී ඇත්නම් සම්මත පණිවිඩයක් මුද්රණය කෙරේ.
හා
:
ඉහත ප්රකාශන වලින් මහා බඩවැල ඉවත් කර ඇත්නම්, කවචය පරික්ෂා කරන්නේ පරාමිතිය සකසා තිබේද නැද්ද යන්න පමණි.
word
හිස් අවකාශය ඇතුළුව ඕනෑම සාධාරණ නූලකට යොමු විය හැකි පරිදි මෙහි වාක්ය ඛණ්ඩය ෂෙල් ප්රලේඛනයට සුවිශේෂී වේ .
මෙම විශේෂිත අවස්ථාවෙහිදී, සම්මත දෝෂ පණිවිඩය 1: parameter not set
ප්රමාණවත් නොවන බව මම දනිමි , එබැවින් අපි මෙහි අපේක්ෂා කරන අගය - pathname
නාමාවලියක විශාලනය කරමි .
දාර්ශනික සටහනක්:
කවචය වස්තු නැඹුරු භාෂාවක් නොවේ, එබැවින් පණිවිඩය පවසන්නේ pathname
නැත directory
. මෙම මට්ටමේ දී, මම එය සරලව තබා ගැනීමට කැමැත්තෙමි - ශ්රිතයක් සඳහා වන තර්ක නූල් පමණි.
test -d
@Grundlefleck පැහැදිලි කළ පරිදි නිවැරදි පිළිතුර .
test -d /unreadable/exists
තර්කය පැවතුනද එය අසාර්ථක වනු ඇත.
if [ -d "$Directory" -a -w "$Directory" ]
then
#Statements
fi
ඉහත කේතය මඟින් ඩිරෙක්ටරිය තිබේද සහ එය ලිවිය හැකිදැයි පරීක්ෂා කරයි.
DIRECTORY=/tmp
if [ -d "$DIRECTORY" ]; then
echo "Exists"
fi
space
after [
-> [`` -d . අවකාශය
මෙම කේතය Bash විමසුමේ ටයිප් කරන්න:
if [ -d "$DIRECTORY" ]; then
# If true this block of code will execute
fi
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'
. මම ඔබේ පිළිතුරට මෙම උපක්රමය එකතු කළහොත් ඔබට කමක් නැද්ද? චියර්ස්;)
ඇත්ත වශයෙන්ම, වෙඩි නොවදින ප්රවේශයක් ලබා ගැනීම සඳහා ඔබ මෙවලම් කිහිපයක් භාවිතා කළ යුතුය:
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
ඔබ භාවිතා කරන තාක් කල් අවකාශ සහ විශේෂ චරිත ගැන කරදර වීමට අවශ්ය නැත "${}"
.
[[]]
එය එතරම් අතේ ගෙන යා නොහැකි බව සලකන්න []
, නමුත් බොහෝ අය නවීන බාෂ් අනුවාද සමඟ වැඩ කරන බැවින් (සියල්ලට පසු, බොහෝ අය විධාන රේඛාව සමඟ පවා ක්රියා නොකරයි :-p), කරදරයට වඩා ප්රතිලාභ වැඩි ය.
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
වාරණය ක්රියාත්මක කිරීමට ඉඩ ලබා දේ.
[[ -d "$DIR" && ! -L "$DIR" ]] && echo "It's a directory and not a symbolic link"
සැ.යු: විචල්යයන් උපුටා දැක්වීම හොඳ පුරුද්දකි.
පැහැදිලි කිරීම:
-d
: එය නාමාවලියක් දැයි පරීක්ෂා කරන්න-L
: එය සංකේතාත්මක සබැඳියක් දැයි පරීක්ෂා කරන්නනාමාවලි එකකට වඩා පරීක්ෂා කිරීමට මෙම කේතය භාවිතා කරන්න:
if [ -d "$DIRECTORY1" ] && [ -d "$DIRECTORY2" ] then
# Things to do
fi
නාමාවලිය තිබේදැයි පරීක්ෂා කරන්න, නැතිනම් එකක් සාදන්න:
[ -d "$DIRECTORY" ] || mkdir $DIRECTORY
mkdir -p "$DIRECTORY"
එකම බලපෑමක් සඳහා භාවිතා කළ හැකිය .
[ -d ~/Desktop/TEMPORAL/ ] && echo "DIRECTORY EXISTS" || echo "DIRECTORY DOES NOT EXIST"
මෙම පිළිතුර ෂෙල් පිටපතක් ලෙස ඔතා ඇත
$ 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
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";
-e
චෙක්පත භාවිතා කිරීම ලිපිගොනු සඳහා පරික්ෂා කරනු ඇති අතර මෙයට නාමාවලි ඇතුළත් වේ.
if [ -e ${FILE_PATH_AND_NAME} ]
then
echo "The file or directory exists."
fi
අනුව , ජොනතන් ගේ අදහස්:
ඔබට ඩිරෙක්ටරිය නිර්මාණය කිරීමට අවශ්ය නම් එය තවමත් නොපවතී නම්, සරලම තාක්ෂණය වන්නේ mkdir -p
ඩිරෙක්ටරිය නිර්මාණය කරන - සහ නැතිවූ ඕනෑම ඩිරෙක්ටරි මාර්ගයට ඉහළින් භාවිතා කිරීමයි - සහ ඩිරෙක්ටරිය දැනටමත් තිබේ නම් එය අසාර්ථක නොවේ, එබැවින් ඔබට ඒ සියල්ල කළ හැකිය එකවරම:
mkdir -p /some/directory/you/want/to/exist || exit 1
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
file
වැඩසටහන භාවිතා කරන්න . සියලුම නාමාවලි ලිනක්ස් හි ගොනු ද වන බැවින් පහත විධානය නිකුත් කිරීම ප්රමාණවත් වේ:
file $directory_name
නැති ගොනුවක් පරික්ෂා කිරීම: file blah
ප්රතිදානය: cannot open 'blah' (No such file or directory)
පවතින නාමාවලියක් පරීක්ෂා කිරීම: file bluh
ප්රතිදානය: bluh: directory
මෙම ls
සමඟ එක්ව විධාන -l
(දිගු ලැයිස්තුගත) විකල්පය ප්රතිලාභ ගොනු සහ බහලුම් පිළිබඳ තොරතුරු ගුණාංග. නිමැවුමේ
පළමු අක්ෂරය ls -l
සාමාන්යයෙන් එය a 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
file="foo"
if [[ -e "$file" ]]; then echo "File Exists"; fi;
ඔබට නාමාවලියක් තිබේදැයි පරීක්ෂා කිරීමට අවශ්ය නම්, එය සත්ය නාමාවලියක් හෝ සිම්ලින්ක් එකක් වුවද, මෙය භාවිතා කරන්න:
ls $DIR
if [ $? != 0 ]; then
echo "Directory $DIR already exists!"
exit 1;
fi
echo "Directory $DIR does not exist..."
පැහැදිලි කිරීම: "ls" විධානය මඟින් දෝෂයක් ලබා දෙයි "ls: / x: ඩිරෙක්ටරිය හෝ සිම්ලින්ක් නොපවතින නම් එවැනි ගොනුවක් හෝ නාමාවලියක් නොමැත", තවද ඔබට "$?" හරහා ලබා ගත හැකි ආපසු කේතය, non? -Null (සාමාන්යයෙන් "1"). "Ls" ඇමතීමෙන් පසු ඔබ කෙලින්ම ආපසු කේතය පරීක්ෂා කිරීමට වග බලා ගන්න.
if ! ls $DIR 2>/dev/null; then echo "$DIR does not exist!"; fi
(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: not: හමු නොවීය [එවැනි ගොනුවක් හෝ නාමාවලියක් නොමැත]
එහි විශාල විසඳුම් තිබේ, නමුත් අවසානයේ ඔබ නිවැරදි නාමාවලියෙහි නොමැති නම් සෑම ස්ක්රිප්ට් එකක්ම අසාර්ථක වනු ඇත. එබැවින් මේ වගේ කේත කරන්න:
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
සාර්ථකව ක්රියාත්මක වන්නේ ඔබ ක්රියාත්මක වන මොහොතේ උප බහලුමක් ඇති නාමාවලියක නම් පමණි.
මම මේ වගේ ආරම්භක ප්රශ්නය තේරුම් ගත්තා: ගොනු පද්ධතියේ පරිශීලකයාගේ ස්ථානය නොසලකා නාමාවලියක් තිබේදැයි තහවුරු කර ගැනීම. එබැවින් 'find' විධානය භාවිතා කිරීමෙන් උපක්රමය කළ හැකිය:
dir=" "
echo "Input directory name to search for:"
read dir
find $HOME -name $dir -type d
ලිපිගොනු / නාමාවලි සෙවීමේදී ප්රයෝජනවත් අංගයක් වන ආදේශක කාඩ්පත් භාවිතා කිරීමට ඉඩ සලසන බැවින් මෙම විසඳුම හොඳයි. එකම ගැටළුව නම්, සෙවූ නාමාවලිය නොපවතින නම්, 'find' විධානය සම්මත නිමැවුමට කිසිවක් මුද්රණය නොකරනු ඇත (මගේ රසය සඳහා අලංකාර විසඳුමක් නොවේ) සහ කෙසේ වෙතත් ශුන්ය පිටවීමක් ඇත. සමහර විට යමෙකුට මේ පිළිබඳව දියුණු විය හැකිය.
locate
නමුත් වෙන කිසිම දෙයකට සුදුසු නැත ...
--
බෙහෙවින් නිර්දේශ කෙරේ (විකල්පයේ අවසාන සලකුණු). එසේ නොමැතිනම්, ඔබේ විචල්යය තුළ විකල්පයක් ලෙස පෙනෙන යමක් තිබේ නම්, ස්ක්රිප්ට් අවකාශය මෙන් අසාර්ථක වනු ඇත.