他の入れ子になったディレクトリにはいくつかのファイルがあります。すべてのファイルの名前はですAnalysis.mzXML
。以前に保存したディレクトリに応じて、各名前を別の名前に変更しながら、すべてのファイルを1つの場所に保持したいと思います。
ファイルを移動してディレクトリ名を指定することは、他の質問に表示されることがわかります。これ、これそしてこれ。
ただし、プログラムを使用して1つのディレクトリから移動し、そのディレクトリに基づいて名前のみを変更します。私の場合は、入れ子になったディレクトリのフルパスを使用してファイル名を変更したいと思いました。
すべてのファイルは次のように保存されます。
/dir1/dir2/dir3/dir4/dir5/dir6/Analytic.mzXML
それぞれがAnalysis.mzXML
異なる名前を持つフォルダーに入れ子になっています。しかし、dir6
偶然にはすべてのファイルの名前が同じで重要な情報を提供していないので、スキップしたいと思います。
私の期待は、いくつかのコマンドまたはスクリプトを実行すると、次の特定のパスで名前が付けられたすべてのファイルを取得できることです。
/dir1_dir2_dir3_dir4_dir5.mzXML
私はbashを使い始めましたが、この問題を解決する方法がわかりません。
答え1
書かれているように、あなたの質問は、ファイルが、、、、または同様の可能性がない、または不適切な場所に表示されても、ファイルAnalysis.mzXML
システム全体でファイルを検索し、ファイルをルートディレクトリに移動したいことを示しています。ありそうにない/不適切。私はあなたが別のディレクトリで作業していると仮定します。/lib/perl5/5.14/Unicode/Collate/Locale
/proc/sys/net/ipv4/conf/all
/sys/devices/system/cpu/cpu0/cache
/usr/share/doc/cmake/html/_sources
次のコマンドを実行します。
find . -mindepth 7 -maxdepth 7 -type f -name Analysis.mzXML -exec sh -c 'for arg do echo mv -i -- "$arg" "$(echo "$arg" | sed -e "s|^\./||" -e "s|/dir6/Analysis\.mzXML|.mzXML|" -e "s|/|_|g")"; done' sh {} +
-mindepth 7 -maxdepth 7
Analysis.mzXML
すべてのファイルが7番目のレイヤーにあると確信している場合は、省略してください。このコマンドは、Analysis.mzXML
7階層のすべてのファイルを見つけ、ミニシェルスクリプトに渡します。これは各パス名を取得し、ファイル名の./
先頭とdir6
末尾、一部を削除し、残りのすべての文字をに変更します。これにより、次のような出力が生成されます。Analysis
/
_
mv -i -- ./dir1/dir2/dir3/dir4/dir5/dir6/Analysis.mzXML dir1_dir2_dir3_dir4_dir5.mzXML
mv -i -- ./the/quick/brown/fox/jumps/dir6/Analysis.mzXML the_quick_brown_fox_jumps.mzXML
mv -i -- ./over/the/lazy/dog/foo bar/dir6/Analysis.mzXML over_the_lazy_dog_foo bar.mzXML
これが正しいと思われる場合は、コマンドを再実行しますが、最初のコマンドを削除してくださいecho
(例:echo mv
単に変更mv
)。
メモ:
- これは、6番目のレベルのディレクトリが実際に呼び出されることを確認しません
dir6
。Analysis.mzXML
でファイルを見つけたら、ファイルdir11/dir12/dir13/dir14/dir15/dir16
名dir11_dir12_dir13_dir14_dir15_dir16_Analysis.mzXML
をdir11_dir12_dir13_dir14_dir15.mzXML
。 - すでに存在する名前でファイルを移動しようとすると、確認メッセージが表示されます
-i
。mv
--
次に始まる議論からあなたを守る必要があります。-
。$arg
常にで始める必要があるので問題ありません./
。- 本当にファイルシステムのルートでこれを行うには、そうすることができる必要があります。
cd /
上記の指示に従ってください。
後で考えてみてください。というディレクトリがあると、この操作が失敗する可能性がありますAnalysis.mzXML
。だからしないでください。
答え2
1つのファイルのみ移動を使用する場合は、mv
ソースファイル名を指定してから、ターゲットファイル名を指定してください。またはターゲットディレクトリ(たとえば、別のディレクトリで同じ名前を持つ場合)
mv /path/to/Analysis.mzXML /new/directory/new-filename.mzXML
または(新しいディレクトリに同じファイル名を保持):
mv /path/to/Analysis.mzXML /new/directory/
複数のファイルを移動するには、ターゲットを指定してください。〜しなければならないディレクトリです。例えば
mv /path/to/*.mzXML /new/directory/
cp
1つ以上のファイルをコピーする(mv
。