特定のディレクトリで使用すると、そのls | tee -a file.txt
ディレクトリのリストが提供されます。
例:
file1.txt file2.txt file3.txt
ls
一括後処理のためにコマンドの特定の文字列を最終出力に追加するにはどうすればよいですか?各ファイルに対して、特定のファイル名と特定のコマンドをコピーして貼り付ける必要があります。
例は次のとおりです。
ls | tee -a string1(FilenameFromDirectory)string2
出力
string1(file1.txt)string2
string1(file2.txt)string2
string1(file3.txt)string2
ベストアンサー1
始めと終わりに文字列を追加するのはとても簡単です。
$ ls
file1.txt file2.txt file3.txt
$ ls | sed -e 's/^/string1/' -e 's/$/string2/'
string1file1.txtstring2
string1file2.txtstring2
string1file3.txtstring2
括弧を使用しないことをお勧めします( )
。ファイル名に特殊文字が含まれると、処理がより複雑になります。可能であれば、_
代わりにまたはを使用してください。-
括弧の使用に固執する場合は、次のようにできます。
$ ls | sed -e 's/^/string1(/' -e 's/$/)string2/'
string1(file1.txt)string2
string1(file2.txt)string2
string1(file3.txt)string2
重要:端末から結果を印刷したり、以前と同じようにファイルに転送したい場合は>
問題ありません。tee
ただし、これを使用してファイルの名前を変更したり、ファイルをコピーまたは操作したい場合は機能しません。分析するls
このアプローチは非常に脆弱であり、わずかに奇妙なファイル名がクラッシュする可能性があります。より安全なアプローチは次のとおりです。
$ for file in *; do
printf 'string1(%s)string2\n' "$file"
done
string1(file1.txt)string2
string1(file2.txt)string2
string1(file3.txt)string2