私のディレクトリ構造は次のとおりです。 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"' {} \;
が同じファイルシステムにあり、ターゲットにそのファイルがないファイルがたくさんある場合は、空のファイルにファイルをリンクする代わりにファイルを移動して実行時間を節約できますTest2
。Test3
Test3
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