同じ名前のファイルを移動してリンクする方法

同じ名前のファイルを移動してリンクする方法

私のディレクトリ構造は次のとおりです。 Test3のすべてのフォルダをTest2に移動し、同じ名前のファイルをリンクする必要があります。

[jg@hpc Test2]$ tree
.
|-- Sample_1008
|   |-- 1008_ATCACG_L002_R1_001.fastq
|   |-- 1008_ATCACG_L002_R2_001.fastq
|   |-- 1008_ATCACG_L006_R1_001.fastq
|   `-- 1008_ATCACG_L006_R2_001.fastq
`-- Sample_1009
    |-- 1009_CGATGT_L002_R1_001.fastq
    |-- 1009_CGATGT_L002_R2_001.fastq
    |-- 1009_CGATGT_L006_R1_001.fastq
    `-- 1009_CGATGT_L006_R2_001.fastq

[jg@hpc Test3]$ tree
.
|-- Sample_1008
|   |-- 1008_ATCACG_L002_R1_001.fastq
|   |-- 1008_ATCACG_L002_R2_001.fastq
|   |-- 1008_ATCACG_L006_R1_001.fastq
|   `-- 1008_ATCACG_L006_R2_001.fastq
`-- Sample_1009
    |-- 1009_CGATGT_L002_R1_001.fastq
    |-- 1009_CGATGT_L002_R2_001.fastq
    |-- 1009_CGATGT_L006_R1_001.fastq
    `-- 1009_CGATGT_L006_R2_001.fastq

頑張った

mv Test3/* /auto/dr-lc_sa1/Data/Test2

何も動作しませんが、試してみると

cp -r Test3/* Test2/

それは覆われるでしょう。

ファイルをリンクしたいです。最後に、Test2 ディレクトリが必要で、各サンプルの下で、Test3 ディレクトリの fastq ファイルが Test2 ディレクトリの対応する fastq ファイルにリンクされます。

答え1

ファイルをリンクして削除する組み込み方法がないため、2つのステップに分ける必要があります。

zshで、またはbash ≥4で実行した後shopt -s globstar、またはkshで実行した後set -o globstar

cd Test3
for x in **/*.fastq; do
  cat "$x" >>"/auto/dr-lc_sa1/Data/Test2/$x" && rm "$x"
done

**サブディレクトリに再帰する必要はありませんfind。 。

cd Test3
find . -name '*.fastq' -exec sh -c 'cat "$0" >>"/auto/dr-lc_sa1/Data/Test2/$0" && rm "$0"' {} \;

が同じファイルシステムにあり、ターゲットにそのファイルがないファイルがたくさんある場合は、空のファイルにファイルをリンクする代わりにファイルを移動して実行時間を節約できますTest2Test3Test3

for x in **/*.fastq; do
  if [ -s "../Test2/$x" ]; then
    cat "$x" >>"/auto/dr-lc_sa1/Data/Test2/$x" && rm "$x"
  else
    mv "$x" "/auto/dr-lc_sa1/Data/Test2/$x"
  fi
done

関連情報