サブディレクトリとサブディレクトリのすべてのファイルをプライマリディレクトリにコピーし、すべての親ディレクトリのプレフィックスを追加してファイル名を変更します。

サブディレクトリとサブディレクトリのすべてのファイルをプライマリディレクトリにコピーし、すべての親ディレクトリのプレフィックスを追加してファイル名を変更します。

次の2つの投稿に続きます。

https://askubuntu.com/questions/871898/move-files-to-parent-directory-prefixing-file-name-with-former-subdirectory-nam

https://askubuntu.com/questions/870844/recursively-add-directory-name-to-file-name

私は同じことをしたいのですが、移動の代わりにコピーしたいです。簡単に言えば、サブディレクトリがあるディレクトリと、内部にいくつかのファイルがあるサブサブディレクトリがあります。すべてのファイルを別の宛先フォルダにコピーしたいのですが、一部のファイルの名前が正しいため、親ディレクトリの名前をファイル名の前にプレフィックスとして追加したいと思います。

Ubuntu 16.04で実行中です。

ベストアンサー1

努力する:

find  -name "*.dat" -exec bash -c 'echo cp "$1" "$(sed -e s:/:-:g -e s:^.-:./: <<<"$1")"' tinyscript {} \;

(コマンドが大丈夫に見える場合は「echo」を削除してください)

.
└── 1
    └── 2
        ├── 3
        │   └── 4
        │       └── foo.dat
        └── foo.dat

生産する:

cp ./1/2/3/4/foo.dat ./1-2-3-4-foo.dat
cp ./1/2/foo.dat ./1-2-foo.dat

デフォルトでは、cp "$1" "$(sed -e s:/:-:g -e s:^.-:./: <<<"$1")"ソースパスのすべてのエントリを 。/-tinyscript

おすすめ記事