特別な方法でファイルを一括コピーしたいです。スクリプトが必要ですか?

特別な方法でファイルを一括コピーしたいです。スクリプトが必要ですか?

私は数年間Linuxを使用してきましたが、コンソールにはあま​​り慣れていません。簡単なコピーコマンドを管理できますが、今私が知っている範囲を超える要件がありました。

私は多数のディレクトリ(folder1、folder2、folder3など)を持っています。各ディレクトリには、同じ名前(file.txtなど)を持つファイルがあります。これで、これらのファイルをディレクトリに一括コピーし、そのディレクトリの名前をファイル名として使用したいと思います。元のファイルは変更されていないままにしてください。

これにより、「folder1/file.txt」が「folder1/folder1.txt」にコピーされます。

これは、各ディレクトリに同じ内容を持つ2つのファイルが必要です。そのうちの1つは、ディレクトリと同じ名前でなければなりません。

これを行うにはbashスクリプトが必要だと思います。そうですか?それでは、このスクリプトはどのようなものでしょうか?

助けてくれてありがとう。

いじめる

ベストアンサー1

はい、スクリプト(または他のプログラムを使用する場合はかなり複雑なスクリプト)が必要です。しかし、それほど長くも従わずにも難しくありません。

#/------------------------------ for … in … : go through the list supplied after
#|                               the "in" one by one, setting the variable
#|                               specified after the "for" to each element from
#|                               the list, in turn
#| 
#|      /----------------------- original: name of variable to set to each value
#|      |
#|      |           /----------- */file.txt: the list of all "foldername/file.txt"
#|      |           |
#|  /------\    /--------\   
for original in */file.txt ; do

  folder_only="${original%/file.txt}"
  #\--------/  \-------------------/
  #    |                 |
  #    |                 \------------ become the value of "original", but cut off
  #    |                               any "/file.txt" from the end; for example:
  #    |                               "folder1/file.txt" becomes "folder1"
  #    |
  #    \------------------------------ save the result in a variable that's called
  #                                    "folder_only"

  cp -- "${original}" "${folder_only}/${folder_only}.txt"
done

または説明なし:

for original in */file.txt ; do
  folder_only="${original%/file.txt}"
  cp -- "${original}" "${folder_only}/${folder_only}.txt"
done

おすすめ記事