さまざまなサイズとコンテンツテストセットを使用してテストを実行しています。データファイルは頻繁に追加され削除されます。ファイルリストを自動的に収集する方法を探しています。
すべてのファイルはのサブディレクトリにありますD
。テキストファイルに完全なディレクトリと名前を追加する必要があります。ただし、ファイル名は同じですが、拡張子が異なる(つまり...ファイル名は異なりますが、構造化された方法で)「ペア」ファイルを持つファイルのみが必要です。MyFileName.A
だからあれば、ファイルリストに追加したいとMyFileName.B
思います。D/.../MyFileName
.A
ファイルのないファイルはありますが、ファイルのないファイル.B
はありません。にファイルがある場合は、両方のファイルが同じディレクトリにあります。.B
.A
.A
.B
どんな提案がありますか?
答え1
ファイル名に改行文字が含まれていない場合は、次のことができます。
find D -type f \( -name '*.A' -o -name '*.B' \) |
sed 's/\.[^.]*$//' |
sort |
uniq -d >paired_files
.B
これは、ファイルがあるがファイルがないより一般的な場合に機能します.A
。
最新のGNUツールを使用してファイル名を処理するには:
find D -type f \( -name '*.A' -o -name '*.B' \) -print0 |
sed -z 's/\.[^.]*$//' |
sort -z |
uniq -dz |
tr '\0' '\n' >paired_files
答え2
「.Aファイルがないと.Bファイルがありません」という説明が正しい場合は、.Bファイルのリストをインポートして拡張子を削除してください。
find $directory-to-search -name "*.B" | sed -r -e "s~(.*)\.B~\1~g"
答え3
そしてzsh
:
print -rl mydir/**/*.A(.e_'REPLY=$REPLY:r; [[ -f $REPLY.B ]]'_)
:r
$REPLY
拡張機能をアンmydir/somedir/somefile.A
インストールすると、内容が実行され、残りのREPLY=$REPLY:r
内容は次のようになりますmydir/somedir/somefile
。
この回答。