私はこれを行うためにUNIXのワンライナーを頼みたい
これでファイル名は取得できます find . -type f > filenames.txt
が、次のようなテキストファイルを取得したいと思います。
filename;filenamekey
./fn123456789X-5.txt;./123456789X5.
2番目のフィールドは、すべての文字([a-yA-Y]以外の数字)で置き換えられたファイル名である必要があります。理由は、このフィールドがISBN(0-9およびXで構成される)で構成されているためです。
次に、このようにfilenamekeyで検索します
Select filename from books where filenamekey like '%123456789X%';
ファイル名には、ISBNである必要はありませんが、可能です。ISBNがない場合、キーは空またはジャンクにする必要があります。
私はこれを試しました:
find . -type f > filenames1.txt
cat filename1.txt | sed -e 's/[^0-9X\/\.]//g' > filenamekey1.txt
paste filename1.txt filenamekey1.txt | awk '{print $1,$2}'
洗練されたワンライナーはありますか?
どうもありがとう!
superuser.comは無料のスクリプト/コード作成サービスではないことに注意してください。これまでに試したこと(既に使用しているスクリプト/コードを含む)と行き詰まっている場所を教えていただければ、特定の問題の解決を試みることができます。また、「良い質問をするにはどうすればよいですか?」もお読みください。。
—
デビッドポスティル
わかりました、デビッド、私はファイル名に対してのみこれを行い、私のデルファイプログラムで置換ジョブをしました。私はUNIXの1行にそれほど馴染みがないので、txtファイルをMYSQLテーブルにインポートする前にそれを行うより洗練された方法かもしれません。wholefilenamesを作成してファイルに入れ、ファイル名をgrepして別のファイルに入れて再処理するなど、もっと多くのステップでそれを行うことができます。しかし、私は確かに、1人のUnixワンライナーでそれを行うことができるいくつかのスマートフリークがあります。
—
ウォルターシュラブマイアー16年
2つの基本的な方法で実行できます。(1)
—
AFH
find . -type f -exec command parameters {} parameters \;
、ここで、コマンドとパラメーターは必要な処理であり、見つかった各ファイル名は置き換えられます{}
(終了するまで繰り返すことができます\;
)。より複雑な場合は、コマンドをスクリプトに組み込み、{}
パラメーターとして渡すことができます。(2)find . -type f | while read name; do commands ... ; done
、見つかった各ファイルに対してコマンドが使用する場所"$name"
。
@AFHどうもありがとう。私は今これを試しましたが、ここで2番目のフィールドを見逃して
—
ウォルターシュラブマイアー16年
find . -type f | while read name; do echo $name | sed -e 's/[^0-9\/\.]//g' | awk '{print $1,";",$2}' ; done
います
私は自分の間違いを見つけました:私は今これを試しました:
—
Walter Schrabmair
find . -type f | while read name; do ohne="$(sed -e 's/[^0-9X\/\.]//g' <<< $name)"; echo $name,";",$ohne; done