ビデオの名前を変更して移動するスクリプトを取得しようとしています。ここに私が持っているものがあります:
#!/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形式)が重複しているのはなぜかわかりません。どんな助けも大歓迎です。
結局のところ、問題はCIFS共有のマウント方法を中心に展開されました。 iノードがキャッシュされている可能性があるため、スクリプトが新しいファイル名を書き込もうとしたときに、ほとんどのファイルの複製がレンダリングされたようです。これを解決するために、fstabに「cache = none」を追加し、共有を再マウントしました。それ以来、何回も問題なくスクリプトを実行しました。
私は問題が何であったかを知っていますが、なぜそれが問題であったのか完全にはわかりません。これがCIFSマウントにどのように影響するかについての洞察があれば、私はすべて耳にします。
まず、Sudo
を使用してスクリプトをデバッグしないでください。
"$dir"*.*
という表現は、あなたが思うことを意味するものではありません。試してください:
echo "$dir"*.*
$dir
のファイルのリストを作成するには、find
を使用します(man find
を参照):
find "$dir" -type f -print
スクリプトにパイプするか、xargs
(man xargs
)でパラメーターに分割できます。
find
およびxargs
(およびsort
およびその他いくつか)は、NUL
A file name.txt
区切り文字を使用して、スペース((0x00)
)を含むファイル名を処理できます。悲しいことに、これを実現するために、コンマラインスイッチ(-0
、-z
、--null
)が混在しています。man
ページを参照してください。