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