Я новачок у баш, і я намагаюся побачити, чи мояКаталог містить папку відповідного файлу txt. Не всі папки мають відповідний текстовий файл, а в каталозі є багато папок і текстових файлів, тому я хотів, щоб він був автоматизований.
приклад реж:
a_1/
a_1.txt
b_1/
b_1.txt
c_1/
c_1.txt
d_1/
Я розумію, як перевірити, чи файл або папка існує в каталозі окремо. Але у мене виникають проблеми з перевіркою, чи існує папка у відповідному файлі txt у каталозі.
Я хотів щось, де він буде виводити папку існує, але файл не "т. З наведеного вище прикладу можна було б надрукувати файли, які мають відповідну папку: folder a_1/ and a_1.txt both exist
і не мають відповідного файлу txt: d_1/ exist but txt file doesn"t.
Це те, що я зараз маю, але вона, здається, не працює. :(
#!/bin/bash
for x in *; do
if [[ -d "$DIRECTORY" ]] && [[ -f ${f%.txt} ]]; then
echo -n "$x ${x%%.dir}.txt are both present ";
else
echo "directory "$DIRECTORY" existed but didn"t find txt file"
Відповіді:
1 для відповіді № 1На основі вашої специфікації сценарій виправлено:
#!/bin/bash
for x in *; do
if [[ -d "$x" ]]; then
if [[ -f $x.txt ]]; then
echo "$x and $x.txt are both present "
else
echo "Directory "$x" exists but $x.txt doesn"t"
fi
fi
done
0 для відповіді № 2
Просто коментар до вищенаведеної відповіді, подвійний [[і]] не є необхідними. Крім того, ви можете позначити поточний робочий каталог за допомогою періоду (bash trick, який також працює в командному рядку):
for x in .; do
if [ -d ${x} ]; then
...
fi
done
Також можна вказати шлях з командного рядка:
./myprog.sh / Томи / myflashdrive / filedir
path=${1}
for x in ${path}; do
if [ -d ${x} ]; then
...
fi
done