Bash 当我解决文件名的问题时,我的回答很快超时:)echo和sed调用非常脆弱——例如,在某些平台上,echo会将文件名中的反斜杠解释为转义序列。幸运的是,您可以使用shell的替换机制来mv“${mrk#u source#.marker}”/output/ou

Bash 当我解决文件名的问题时,我的回答很快超时:)echo和sed调用非常脆弱——例如,在某些平台上,echo会将文件名中的反斜杠解释为转义序列。幸运的是,您可以使用shell的替换机制来mv“${mrk#u source#.marker}”/output/ou,bash,Bash,当我解决文件名的问题时,我的回答很快超时:)echo和sed调用非常脆弱——例如,在某些平台上,echo会将文件名中的反斜杠解释为转义序列。幸运的是,您可以使用shell的替换机制来mv“${mrk#u source#.marker}”/output/out。(为什么要计算目标文件名,而您需要给mv的只是目标目录?)我解释了目标文件名-保留子目录,因此/input/in/dir1/abc.pdf转到/output/out/dir1/abc.pdf;如果要展平目录结构(或者没有目录结构),那么只需


当我解决文件名的问题时,我的回答很快超时:)
echo
sed
调用非常脆弱——例如,在某些平台上,
echo
会将文件名中的反斜杠解释为转义序列。幸运的是,您可以使用shell的替换机制来
mv“${mrk#u source#.marker}”/output/out
。(为什么要计算目标文件名,而您需要给
mv
的只是目标目录?)我解释了目标文件名-保留子目录,因此
/input/in/dir1/abc.pdf
转到
/output/out/dir1/abc.pdf
;如果要展平目录结构(或者没有目录结构),那么只需指定目标就足够了。
echo
的问题“不应该”是一个问题,因为
echo
的原始设计很简单,所有后来的附加功能。。。行李只是把本该完全可靠的东西变成了可怕的不可靠的东西。也就是说,包含反勾号、
$(…)
等的名称可能会出现问题。感谢您的详细解释和快速回答!我们只使用一个简单的文件命名模式,使用下划线,移动文件时没有子目录结构需要保留。第一个命令行中有一个小错误:引号不匹配。应该使用两个单引号或双引号。旁注:
ls
在反勾中几乎总是错误的<$VLOGDIR/*.pdf文件名的代码>;执行…将已排序。为什么还要关心排序顺序呢?我喜欢单独的脚本,但不要忘记
basename
会删除文件名的目录部分以及文件的后缀。您应该坚持使用
${1%.marker}
。直到并行。谢谢
FILELIST=$(ls ${V04}/*.pdf.marker 2> /dev/null | sort)
for FILEMARKER in ${FILELIST}; do
    FILENAME=${V04}/$(basename $FILEMARKER .marker)
        mv ${FILENAME} ${VLOGDIR}/.  
        mv ${FILENAME}.marker ${VLOGDIR}/.  
    done  
find /input/in -iname "*.marker" -print0 | xargs -0 -r -I {} mv `basename {} .marker`  /output/out
find /input/in -name '*.marker' -print0 | xargs -0 mover.sh
for mrk_source in "$@"
do
    pdf_source=$(echo "$mrk_source" | sed 's/\.marker$//')
    mrk_target=$(echo "/output/out/$mrk_source" | sed 's%/input/in%%')
    pdf_target=$(echo "/output/out/$pdf_source" | sed 's%/input/in%%')
    mv "$mrk_source" "$mrk_target"
    mv "$pdf_source" "$pdf_target"
done
$ mkdir -p input/in output/out
$ for name in a b 'c d' 'e  f  g' '$(cat x)' '`cat y`' 'a\\nb'
> do
>    cp /dev/null input/in/"$name.pdf"
>    cp /dev/null "input/in/$name.pdf.marker"
> done
$ ls -lR [io]*
input:
total 0
drwxr-xr-x  16 jleffler  staff  544 Aug 22 00:45 in

input/in:
total 0
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 $(cat x).pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 $(cat x).pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 `cat y`.pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 `cat y`.pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 a.pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 a.pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 a\\nb.pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 a\\nb.pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 b.pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 b.pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 c d.pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 c d.pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 e  f  g.pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 e  f  g.pdf.marker

output:
total 0
drwxr-xr-x  2 jleffler  staff  68 Aug 22 00:45 out

output/out:
$ find input/in -name '*.marker' -print0 | xargs -0 sh mover.sh
mv: rename input/in/a\nb.pdf to ./output/out/a
b.pdf: No such file or directory
$ ls -lR [io]*
input:
total 0
drwxr-xr-x  3 jleffler  staff  102 Aug 22 00:46 in

input/in:
total 0
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 a\\nb.pdf

output:
total 0
drwxr-xr-x  15 jleffler  staff  510 Aug 22 00:46 out

output/out:
total 0
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 $(cat x).pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 $(cat x).pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 `cat y`.pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 `cat y`.pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 a.pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 a.pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 a\nb.pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 b.pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 b.pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 c d.pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 c d.pdf.marker
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 e  f  g.pdf
-rw-r--r--  1 jleffler  staff  0 Aug 22 00:45 e  f  g.pdf.marker
$ 
for mrk_source in "$@"
do
    pdf_source=${mrk_source%.marker}
    mrk_target=${mrk_source/\/input\/in/\/output\/out}
    pdf_target=${pdf_source/\/input\/in/\/output\/out}
    mv "$mrk_source" "$mrk_target"
    mv "$pdf_source" "$pdf_target"
done
xargs -0 -r -I {} mv {} /output/out
for f in $(find /input/in -iname "*.marker"); do
    mv `basename $f .marker` /output/out
done
find /input/in -iname "*.marker" -print0 |
xargs -r0 -i sh -c 'mv `basename "{}" .marker` /output/out; mv "{}" /output/out'
find /input/in -iname "*.marker" -exec ./myscript {} \;
#!/bin/sh
mv `basename "$1" .marker` /output/out
mv "$1" /output/out
ls -1 "${V04}/*.pdf,.marker | while read FM; 
do 
    mv "${FM}" "${VLOGDIR}/"
    mv "${V04}/$(basename "${FM}" .marker)" "${VLOGDIR}/"
done;
ls "$V04"/*.pdf.marker | parallel -q mv {.} {} "$VLOGDIR"