あるディレクトリにファイルのリストがあり、別のディレクトリの各ファイルに対応するjpegセットがあります。すべてのファイルを繰り返し調べて、各ファイル名の宛先ディレクトリを決定する必要があります。
たとえば、およびinというfoo.txt
名前のテキストファイルが3つある場合、対応するjpegはおよびにあります。bar.txt
baz.txt
/home/userA/folder/
/home/userA/folder2/foo/
/home/userA/folder2/bar/
/home/userA/folder2/baz/
すべてのtxtファイルを繰り返して、対応するターゲットディレクトリをインポートするスクリプトを作成しましたが、エラーが発生します。
bash: /home/userA/folder/File1.txt: syntax error: operand expected (error token is "/home/userA/folder/File1.txt")`
私のスクリプト:
#!/bin/bash
FILES=/home/userA/folder/*.txt
for i in $FILES
do
str1=$i | cut -d'/' -f5 #to get the name of the file
echo /home/userA/folder2/$i_filename #I want to include the .txt filename in the output to be like this /home/userA/folder2/Text1_filename
done
この問題をどのように解決できますか?
ベストアンサー1
必要なものがファイル名を取得し、それを使用して正しい宛先ディレクトリを取得することであれば、次のことができます。
#!/bin/bash
for i in /home/userA/folder/*.txt
do
## Get the file name
str1="${i##*/}"
## Get the target directory
dir="/home/userA/folder2/${str1%.txt}/"
done
これはシェルを使用する基本です。文字列演算特徴。${var##pattern}
最も長い一致は最初から削除され、最も短い一致は最後から削除されます。したがって、ファイル名から最後(パス)まですべてを削除し、最後から文字列を削除します。pattern
$var
${var%pattern}
pattern
$var
${i##*/}
/
${i%.txt}
.txt