簡體   English   中英

復制文件和一個目錄

[英]Copy files and one directory up

我有一個 txt 文件,其中包含幾千個文件,具有以下補丁方案:

/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename1
/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename2
/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir2/filename3

我想遍歷所有文件,然后將 variable_dir/filename 復制到一個 newdir 中,例如最終得到如下內容:

/new/path/variable_dir1/filename1
/new/path/variable_dir1/filename2
/new/path/variable_dir2/filename3

你能為我提供一個用於 bash 的小型 shell 腳本嗎?

然后你可能會使用一個while循環

while read ;
do 
rep=s( echo $REPLY | sed 's/.\/dir3//' ) #bad method but more readable
mkdir -p new/$rep && cp $REPLY new/$rep/
done < filesource

例子

👨francois@💻zaphod🐙:~/tmp/test$ touch filename{1,2,3,4}
👨francois@💻zaphod🐙:~/tmp/test$ ls filename* > toto
👨francois@💻zaphod🐙:~/tmp/test$ while read ; do mkdir filename$REPLY && cp $REPLY filename$REPLY ; done  < toto
👨francois@💻zaphod🐙:~/tmp/test$ tree
.
├── filename1
├── filename2
├── filename3
├── filename4
├── filenamefilename1
│   └── filename1
├── filenamefilename2
│   └── filename2
├── filenamefilename3
│   └── filename3
├── filenamefilename4
│   └── filename4

歡迎來到 Notepad++ 的精彩世界,我在這里做了:

首先,我將您的文件列表復制了兩次:

/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename1
/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename2
/fixed_dir1/fixed_dir2/fixed_dir3/variable_dir2/filename3

在第二個副本中,我選擇/fixed_dir1/fixed_dir2/fixed_dir3並通過/new/path進行了查找/替換。 之后,我使用列模式將第二個列表復制到第一個列表后面,再次使用列模式,我在列表的開頭添加了cp ,所以我得到了類似的東西:

cp /fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename1 /new/path/variable_dir1/filename1
cp /fixed_dir1/fixed_dir2/fixed_dir3/variable_dir1/filename2 /new/path/variable_dir1/filename2
cp /fixed_dir1/fixed_dir2/fixed_dir3/variable_dir2/filename3 /new/path/variable_dir2/filename3

您可以嘗試第一行,看看它是否有效。 如果您沒有更正它並再次使用列模式以使其適用於所有行。

您可能會想“您是認真的嗎?我正在尋找具有一定編程技能的腳本,而您提出了一些基本的文本格式! ”。 我可以告訴你:我已經做了很多這樣的操作,如果你的腳本有任何問題,你可能會弄亂你的整個文件/目錄,而這種方法可能只對一個錯誤,你糾正它,對於 rest你有完全的控制權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM