web-dev-qa-db-ja.com

シェルスクリプトのmvエラーは「同じファイルです」

ビデオの名前を変更して移動するスクリプトを取得しようとしています。ここに私が持っているものがあります:

#!/bin/bash

src="/mnt/Files_Apps/temp/"
dest="/mnt/Files_Apps/TFTP root/"

for file in "$src"*.*; do
newfile="${dest}$(date -r "$file" +"%Y-%m-%d %H %M %S").MOV"
mv "$file" "$newfile" 
done

出力をデバッグすると、次のように表示されます。

$ Sudo bash -v videorename.sh 

date -r "$file" +"%Y-%m-%d %H %M %S"
mv: '/mnt/Files_Apps/temp/IMG_7662.MOV' and '/mnt/Files_Apps/TFTP root/2016-      05-08 11 57 58.MOV' are the same file
date -r "$file" +"%Y-%m-%d %H %M %S"
mv: '/mnt/Files_Apps/temp/IMG_7687.MOV' and '/mnt/Files_Apps/TFTP root/2016-    05-09 16 03 39.MOV' are the same file
date -r "$file" +"%Y-%m-%d %H %M %S"
date -r "$file" +"%Y-%m-%d %H %M %S"
date -r "$file" +"%Y-%m-%d %H %M %S"
date -r "$file" +"%Y-%m-%d %H %M %S"

Srcディレクトリの詳細:

ls -lia
total 148402
1443129 drwxrwxrwx  3 chris linuxadmin        0 Oct  9 18:12 .
26870564 drwxrwxrwx 15 chris linuxadmin        0 Oct  5 15:51 ..
1441900 -rwxrwxrwx  1 chris linuxadmin 75031725 May  8 11:57 IMG_7662.MOV
1443124 -rwxrwxrwx  1 chris linuxadmin 76930641 May  9 16:03 IMG_7687.MOV

ソースディレクトリの内容を数回変更しました。いくつかのファイルが窒息し、他のファイルは正常に動作します。特に新しいディレクトリにファイルを移動しているので、特定のファイル(すべてiphoneからインポートされたMOV形式)が重複しているのはなぜかわかりません。どんな助けも大歓迎です。

4
cgram

結局のところ、問題はCIFS共有のマウント方法を中心に展開されました。 iノードがキャッシュされている可能性があるため、スクリプトが新しいファイル名を書き込もうとしたときに、ほとんどのファイルの複製がレンダリングされたようです。これを解決するために、fstabに「cache = none」を追加し、共有を再マウントしました。それ以来、何回も問題なくスクリプトを実行しました。

私は問題が何であったかを知っていますが、なぜそれが問題であったのか完全にはわかりません。これがCIFSマウントにどのように影響するかについての洞察があれば、私はすべて耳にします。

2
cgram

まず、Sudoを使用してスクリプトをデバッグしないでください。

"$dir"*.*という表現は、あなたが思うことを意味するものではありません。試してください:

echo "$dir"*.*

$dirのファイルのリストを作成するには、findを使用します(man findを参照):

find "$dir" -type f -print

スクリプトにパイプするか、xargsman xargs)でパラメーターに分割できます。

findおよびxargs(およびsortおよびその他いくつか)は、NULA file name.txt区切り文字を使用して、スペース((0x00))を含むファイル名を処理できます。悲しいことに、これを実現するために、コンマラインスイッチ(-0-z--null)が混在しています。manページを参照してください。

1
waltinator