/ / wbash —ディレクトリにフォルダーと対応するファイルがあるかどうかを確認する-linux、bash

wbash - ディレクトリにフォルダと対応するファイルがあるかどうかを調べる - linux、bash

私はbashが初めてで、自分がディレクトリには、対応するtxtファイルのフォルダが含まれています。すべてのフォルダに対応するtxtファイルがあるわけではなく、ディレクトリに多数のフォルダとtxtファイルがあるため、自動化する必要がありました。

例dir:

a_1/
a_1.txt
b_1/
b_1.txt
c_1/
c_1.txt
d_1/

ディレクトリ内にファイルまたはフォルダーが個別に存在するかどうかを確認する方法を理解しています。しかし、フォルダに対応するtxtファイルがディレクトリに存在するかどうかを確認できません。

私はそれがフォルダが存在するが、ファイルは "t"を印刷するようなものが欲しかった。 上記の例から、対応するフォルダーを持つファイルに対して印刷します: 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

回答№2の場合は0

上記の返信に対するコメント、ダブル[[および]]は不要です。また、ピリオドを使用して現在の作業ディレクトリを示すことができます(ちなみにコマンドラインでも機能するbashトリック)。

for x in .; do
if [ -d ${x} ]; then
...
fi
done

コマンドラインからパスを指定することもできます:

./myprog.sh / Volumes / myflashdrive / filedir

path=${1}

for x in ${path}; do
if [ -d ${x} ]; then
...
fi
done