複数のフォルダの「変更日」を、各フォルダ内の.mkvと同じになるように変更する方法。
例えば。ファイル1.mkvを含むfolder1があります
folder1: 2/17/14
1.mkv: 1/6/12
Folder1に「日付を変更」させたい1/6/12
もあります
folder2: 20/9/13
2.mkv: 1/1/10
Folder2に「日付を変更」させたい1/1/10
等
たぶん、このタッチコマンドを https://unix.stackexchange.com/a/1526 から変更すると役に立ちますか?
touch -r **/*(Dom[1]) .
(私はそれが何をするのか理解できません)
以下にいくつかのサンプルパスを示します(もちろんCygwinを使用)。
Kostas@Kostas-pc /cygdrive/f/movies
$ ls -l
drwx------+ 1 Kostas None 0 Feb 18 17:03 Serpico (1973)
drwx------+ 1 Kostas None 0 Feb 21 01:13 The Rite (2011)
例えば
Kostas@Kostas-pc /cygdrive/f/movies
$ ls -l The\ Rite\ \(2011\)/
total 5730596
-rwx------+ 1 Kostas ???????? 5867505504 Apr 27 2011 The Rite (2011).mkv
-rwx------+ 1 Kostas ???????? 12968 Feb 16 20:03 The Rite (2011).nfo
-rwx------+ 1 Kostas ???????? 79757 Apr 26 2011 The Rite (2011).srt
-rwx------+ 1 Kostas ???????? 264745 Oct 8 2011 The Rite (2011).tbn
-rwx------+ 1 Kostas ???????? 255667 Oct 8 2011 The Rite (2011)-fanart.jpg
touch
、-r
への切り替えでは、指定したファイルを、使用するタイムスタンプの参照として使用します。したがって、たとえば:
$ touch -d 2012-01-01 file1
$ ll
total 0
-rw-rw-r--. 1 saml saml 0 Jan 1 2012 file1
-rw-rw-r--. 1 saml saml 0 Feb 20 14:37 file2
日付2012-01-01を使用してfile1
に日付を設定します。そのファイルのタイムスタンプを使用して、他のファイルやディレクトリを変更できます。
$ touch -r file1 file{2..5}
$ ll
-rw-rw-r--. 1 saml saml 0 Jan 1 2012 file1
-rw-rw-r--. 1 saml saml 0 Jan 1 2012 file2
したがって、-r
スイッチを使用して必要な処理を実行できます。
私が次のものを持っていたとしましょう:
$ ll
total 12
drwxrwxr-x. 2 saml saml 4096 Feb 20 14:42 dir1
drwxrwxr-x. 2 saml saml 4096 Feb 20 14:42 dir2
drwxrwxr-x. 2 saml saml 4096 Feb 20 14:42 dir3
$ ll *
dir1:
total 0
-rw-rw-r--. 1 saml saml 0 Jan 1 2012 1.mkv
dir2:
total 0
-rw-rw-r--. 1 saml saml 0 Feb 1 2012 2.mkv
dir3:
total 0
-rw-rw-r--. 1 saml saml 0 Mar 1 2012 3.mkv
このコマンドを実行すると、これらの各ディレクトリに対応する.mkv
を取得し、そのタイムスタンプを使用して、各親ディレクトリに適用できます。
$ for i in dir*; do mkv=${i/dir/}.mkv; touch -r "$i/$mkv" "$i" ;done
結果:
$ ll
total 12
drwxrwxr-x. 2 saml saml 4096 Jan 1 2012 dir1
drwxrwxr-x. 2 saml saml 4096 Feb 1 2012 dir2
drwxrwxr-x. 2 saml saml 4096 Mar 1 2012 dir3
サンプルのファイル構造に基づいて、次のコマンドを使用します。
$ for i in *;do touch -r "$i/${i}.mkv" "$i";done
$ ll
total 8
drwxrwxr-x. 2 saml saml 4096 Jan 1 2012 Serpico (1960)
drwxrwxr-x. 2 saml saml 4096 Jan 1 2012 The Rite (2011)
$ ll *
Serpico (1960):
total 0
-rw-rw-r--. 1 saml saml 0 Feb 20 18:17 Serpico (1960).mkv
The Rite (2011):
total 0
-rw-rw-r--. 1 saml saml 0 Feb 20 18:17 The Rite (2011).mkv
タイムスタンプを適用
$ for i in *;do touch -r "$i/${i}.mkv" "$i";done
$ ll
total 8
drwxrwxr-x. 2 saml saml 4096 Feb 20 18:17 Serpico (1960)
drwxrwxr-x. 2 saml saml 4096 Feb 20 18:17 The Rite (2011)
このシナリオでは、すべての.mkv
ファイルは、それらが含まれているディレクトリと同じ名前である必要があります。このスクリプトは、/cygdrive/f/movies/
ディレクトリ内で実行します。
for dir in /path/dir1 /path/dir2; do
mkv="${dir}/.mkv"
if [ -f "$mkv" ]; then
touch --reference="$mkv" "$dir"
fi
done