拡張子を変更するためにファイル名を変更したいと思います。効果的に完了しようとしています。
mv *.txt *.tsv
しかし、これを行うと、次のような結果が得られます。
*.tsv はディレクトリではありません。
mv
最初の10回のGoogleクリックマークがこのように機能することが少し奇妙だと思います。
ベストアンサー1
これがあなたの質問に対する答えではないことを知っていますが、回避策ループではなくファイル名を変更する別の方法を探している場合はfind
?私は何十万ものファイルを含む大規模ディレクトリのファイル拡張子を置き換えるためにこのコマンドを複数回使用しました。これはすべてのPOSIX互換システムで機能します。
find . -name "*.gappedPeak" -exec sh -c 'mv "$1" "${1%.gappedPeak}.bed"' _ {} \;
コマンド分析:
'
.
'=>' で示される現在のディレクトリから始まる検索パス。 '
-name
=>照会一致名の設定(この場合で終わるすべてのファイル.gappedPeak
)
-exec
=> 各ゲームで次のコマンドを実行します。
sh -c
=> 'exec'はゲームごとに別々のシェル環境を作成します。
mv "$1" "${1%.gappedPeak}.bed"
=>mv
最初の変数(次のように表現されます)1)(現在のファイル名)が新しい名前に変更されます。ここでは部分文字列のマッチングを実行して削除するので、最初のvarを再取得します。1文字列から削除するために使用されます%
。.gappedPeak
最後の.bed
変数は、残りの変数(以下の例では、)を連結して新しいファイル名を作成します。testNumber
.bed
testNumber.bed
下線はプレースホルダです。$0
{}
は、コマンドで見つかった*.gappedPeak
各()ファイル名に置き換えfind
られます。1sh
コマンドに。
\;
コマンドの終わりを表示します-exec
。';'
またはを使用することもできます";"
。
例:
[user@before]# ls -lh
total 0
-rw-r--r--. 1 root root 0 Jan 26 11:40 test1.gappedPeak
-rw-r--r--. 1 root root 0 Jan 26 11:40 test2.gappedPeak
-rw-r--r--. 1 root root 0 Jan 26 11:40 test3.gappedPeak
-rw-r--r--. 1 root root 0 Jan 26 11:40 test4.gappedPeak
-rw-r--r--. 1 root root 0 Jan 26 11:40 test5.gappedPeak
[user@after]# ls -lh
total 0
-rw-r--r--. 1 root root 0 Jan 26 11:40 test1.bed
-rw-r--r--. 1 root root 0 Jan 26 11:40 test2.bed
-rw-r--r--. 1 root root 0 Jan 26 11:40 test3.bed
-rw-r--r--. 1 root root 0 Jan 26 11:40 test4.bed
-rw-r--r--. 1 root root 0 Jan 26 11:40 test5.bed