[英]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.