次のディレクトリがたくさんあります。
./lab-results.n3668.2017-01-16
./lab-results.n471.2017-02-24
./tests.n287.2017-01-28
./tests.n4501.2017-03-04
残念ながら、ファイル1つだけしかし、名前は同じです。
./lab-results.n3668.2017-01-16/lab-results.pdf
./lab-results.n471.2017-02-24/lab-results.pdf
./tests.n287.2017-01-28/tests.pdf
./tests.n4501.2017-03-04/tests.pdf
次のように名前を変更した後、これらのファイルをすべて移動したいと思います。
./lab-results.n3668.pdf
./lab-results.n471.pdf
./tests.n287.pdf
./tests.n4501.pdf
したがって、shスクリプトを見たようですが、ディレクトリ名の文字の一部を使用してファイルの将来の名前を構成する方法がわかりません。
lab-results.n9999 : max number available, will not change
tests.n9999 : max number
他のディレクトリもありますが、そのディレクトリの名前の後には常に複数の数字が表示されます。
./xxxxxxx.n9999
./yyyyyy.n9999
./zzz.n9999
どんなアドバイスや助けにも感謝します。私はLinuxディストリビューションでbash 4.3.11(1)を使用しています。
答え1
for F in */* ; do echo mv "$F" "${F/.2017*/.pdf}" ; done
またはスクリプトとして:
#! /bin/bash
for F in */*
do
echo mv "$F" "${F/.2017*/.pdf}"
done
ただそれが何をするかを示すだけです。ご希望の場合は削除しecho
て実行してみてください。
秘訣は次のとおりです。ファイル名+パスで検索して${F/.2017*/.pdf}
に置き換えます。.2017*
.pdf
答え2
rename 's|^(\./[^.]*\.[^.]*).*|$1.pdf|' ./*.*.*/*.pdf
- 少なくとも2つのポイントがあり、PDFファイルを含むディレクトリを選択します。
- その後、最初の2つのポイントまで情報を保持し、新しいファイル名を作成します。
- これはDebianベースのシステムにあると仮定
rename
します。他のシステムまたは 。perl-rename
perl-rename
rename
perl-rename
prename