コマンドを使用せずに、親ディレクトリ名の前に追加されたファイルの名前を一括変更する必要がありますrename
。
例えば
/tmp/2017-09-22/cyber.gz
/tmp/2017-09-23/cyber.gz
/tmp/2017-09-24/cyber.tar
/tmp/archive
名前が変更されたファイルも、上記のソースファイルに影響を与えずにコピーする必要があります。
以下のように
/tmp/archive/2017-09-22_cyber.gz
/tmp/archive/2017-09-23_cyber.gz
/tmp/archive/2017-09-24_cyber.tar
ベストアンサー1
ここで使用しない場合は、rename
次のことができます。Shell (Bash, ksh, ksh93, mksh, zsh) Pattern substitution expansion
。
find * -path "archive" -prune -o -type f -exec \
bash -c 'echo "$1" "archive/${1/\//_}"' find_bash '{}' \;
-path "archive" -prune
archive
ディレクトリ自体は含まれません。${1/\//_}
/
スラッシュを下線に置き換えます_
。渡されたファイルパスである1
最初のパラメータを指します。find_bash
{}
(ファイルのコピーまたは移動echo
に置き換えます)cp
mv
ディレクトリ構造:
.
├── 2017-09-22
│ └── cyber.gz
├── 2017-09-23
│ └── cyber.gz
├── 2017-09-24
│ └── cyber.tar
└── archive
コマンドを実行した後:
.
├── 2017-09-22
│ └── cyber.gz
├── 2017-09-23
│ └── cyber.gz
├── 2017-09-24
│ └── cyber.tar
└── archive
├── 2017-09-22_cyber.gz
├── 2017-09-23_cyber.gz
└── 2017-09-24_cyber.tar