예:
.
├── f1.md
├── f2.md
├── f3.md
├── f4.txt
├── f5.csv
├── f6.doc
├── s1
├── s2
├── s3
└── s4
4 directories, 6 files
f1.md/f2.md/f3.md
현재 디렉토리에 복사하려고 하는데 결과 는 입니다 t-f1.md/t-f2.md/t-f3.md
.t-
시도하고 희망하십시오:
for file in *md;do cp -a $file t-$file;done
결과를 얻을 수 있지만 루프를 사용하면 매우 길어 보입니다 for
. 동일한 결과를 얻기 위해 더 짧고 간단한 명령이 있으면 좋겠다고 생각했습니다.
답변1
GNU를 이용한 최단 경로parallel
:
parallel --no-notice 'cp "{}" "t-{}"' ::: *.md
https://www.gnu.org/software/parallel/parallel_tutorial.html
답변2
파일을 복사하려면 이미 가지고 있는 루프가 가장 짧은 방법입니다. 루프 없이 하고 싶다면 다음 cp
rename
과 같이 결합할 수 있습니다.mv
mkdir tmp
cp -a *.md tmp
(cd tmp && rename '' 't-' tmp/*.md)
mv temp/*.md .
이렇게 하면 실행해야 하는 명령이 줄어들어(단지 하나의 cp 명령 대 파일당 하나의 명령) 프로그램 실행 속도가 빨라질 수도 있고 그렇지 않을 수도 있습니다. 이를 벤치마킹해야 합니다. 하지만 파일 수가 많으면 모든 파일을 cp
rename
및 에 전달하므로 실패합니다 mv
.
답변3
그리고 mmv
/ mcp
:
mcp '*.md' t-#1.md
전임자. 주어진
$ tree .
.
├── f1.md
├── f2.md
├── f3.md
├── f4.txt
├── f5.csv
├── f6.doc
├── s1
├── s2
├── s3
└── s4
0 directories, 10 files
그 다음에
$ mcp -v '*.md' t-#1.md
f1.md -> t-f1.md : done
f2.md -> t-f2.md : done
f3.md -> t-f3.md : done
~로 이어지다
$ tree .
.
├── f1.md
├── f2.md
├── f3.md
├── f4.txt
├── f5.csv
├── f6.doc
├── s1
├── s2
├── s3
├── s4
├── t-f1.md
├── t-f2.md
└── t-f3.md
0 directories, 13 files