1

我正在查找 mp3 和 mp3.md5 文件并将它们移动到更高的目录级别。如何指示 mv 目标路径?

发现:http ://www.cyberciti.biz/tips/howto-linux-unix-find-move-all-mp3-file.html哪种帮助-文件结构如下。从 $LOCATION 运行脚本。

|-- 681506b
|   |-- 681506b.xml
|   `-- Web_Copy
|       |-- 681506b_01.mp3
|       `-- 681506b_01.mp3.md5
DESIRED STRUCTURE AFTER DELETING 'Web_Copy' dir:
|-- 681506b
|   |--681506b.xml
|   |--681506b_01.mp3
|   |--681506b_01.mp3.md5

LOCATION="/var/www/web/html/testdata/"
DIRLIST=`ls -x`
for DIR in $DIRLIST
do
  if [ -d "$DIR" ]
   then
   find . -name "*.mp3*" -type f -print0|xargs -0L1 mv {} $LOCATION$DIR
  fi
done

ERROR: mv: target ./681506b/Web_Copy/681506b_01.mp3 is not a directory
S/B:  mv /var/www/web/html/testdata/681506b/
REPLACED mv with echo: 
{} /var/www/web/html/testdata/680593a./681506b/Web_Copy/681506b_01.mp3

谢谢

4

3 回答 3

1

尝试将您的find命令更改为

find . -name '*.mp3*' -type f -print0 | xargs -0 -I list mv list ${LOCATION}${DIR}
于 2013-11-02T16:30:13.093 回答
0

难道只有这行不通吗?

find . -name '*.mp3*' -type f -execdir mv -nv -- {} .. \;

这将找到名称中包含的所有文件 ( -type f) .mp3。对于每个这样的文件,它将从它们在命令中的目录运行mv {} ..(其中{}替换为文件名)。那就是使用 of-execdir而不是-exec

看:

gniourf@somewhere$ mkdir Test && cd Test
gniourf@somewhere$ mkdir -p 681506b{,/Web_Copy}; touch 681506b/{681506b.xml,Web_Copy/681506b.mp3{,.md5}}
gniourf@somewhere$ tree
.
`-- 681506b
    |-- 681506b.xml
    `-- Web_Copy
        |-- 681506b.mp3
        `-- 681506b.mp3.md5

2 directories, 3 files
gniourf@somewhere$ find . -name '*.mp3*' -type f -execdir mv -nv -- {} .. \;
`./681506b.mp3' -> `../681506b.mp3'
`./681506b.mp3.md5' -> `../681506b.mp3.md5'
gniourf@somewhere$ tree
.
`-- 681506b
    |-- 681506b.mp3
    |-- 681506b.mp3.md5
    |-- 681506b.xml
    `-- Web_Copy

2 directories, 3 files
gniourf@somewhere$ 
于 2013-11-02T18:30:46.660 回答
-2

它可以是这样的(未经测试)

for i in $( find $LOCATION -type d -name 'Web_Copy' ); do 
  mv $i/* $i/.. && rmdir $i
done 
于 2013-11-02T16:28:01.093 回答