/ / Bashスクリプト:異なるフォーマットのファイル名が重複していないかを調べるスクリプトを入手するにはどうすればよいですか。 - bash、macos、ファイル

Bashスクリプト:異なるフォーマットのファイル名が重複していないかどうかを確認するスクリプトを取得するにはどうすればよいですか? - bash、macos、file

だから私は変換プログラムを持っていますこれは、データファイルを受け取り、それを新しいフォーマットに変換しながら、さまざまなサブフォルダーを含むフォルダーに入れます。この変換プログラムを実行する前に、重複をチェックするスクリプトを作成したいと思いました。

これまでのところ、私は

#!/bin/bash
for subj in `ls <directory to data files>`
do
subj_name=$subj
subj_path=<directory to data files>/$subj_name #I need this for my program, can ignore


cd <directory with output folders>

if [ -e “$subj” ]; then
echo “This file already exists” #This will restart the loop and move to the next file
else
echo “This folder does not exist”
My_Program #I can handle this one
fi
done

プログラムは同じのファイルで正常に動作しますフォーマット(.txtと.txt)は同じ名前のフォルダと.txtをチェックできません。ファイル形式に関係なく、同じ名前を確認するための変更はありますか?

編集する 私は少し実験をしました、そして、私は出力フォルダとディレクトリに重複したデータファイルを入れました、そしてそれはまだそれを認識しませんでした。これを修正できますか?

回答:

回答№1の場合は3

次の構文を使用して、$ subjの値の末尾から ".txt"を削除し、結果の文字列を返します。 (詳細情報)バッシュ文字列操作")

${subj%.txt}

次に、.txtの有無にかかわらず、ファイル/ディレクトリの存在を確認します。

if [ -e "$subj" ] || [ -e "${subj%.txt}" ]; then
....

サフィックス(.txt、.tgz、...)を削除したい場合は、 ${subj%.*} 最後の "。"以降のすべての文字を削除します。例:

[bash]$ subj=file.txt
[bash]$ echo ${subj%.*}
[bash]$ file

または使用する ${subj%%.*} 最初の "。"以降(およびそれを含む)のすべての文字を削除します。

[bash]$ subj=file.txt.tgz
[bash]$ echo ${subj%%.*}
[bash]$ file